code: func (s *SecureChannelSession) Open() error {
  	if s.iv != nil {
  		return fmt.Errorf("Session already opened")
  	}
  
  	response, err := s.open()
  	if err != nil {
  		return err
  	}
  
  	// Generate the encryption/mac key by hashing our shared secret,
  	// pairing key, and the first bytes returned from the Open APDU.
  	md := sha512.New()
  	md.Write(s.secret)
  	md.Write(s.PairingKey)
  	md.Write(response.Data[:scSecretLength])
  	keyData := md.Sum(nil)
  	s.sessionEncKey = keyData[:scSecretLength]
  	s.sessionMacKey = keyData[scSecretLength : scSecretLength*2]
  
  	// The IV is the last bytes returned from the Open APDU.
  	s.iv = response.Data[scSecretLength:]
  
  	return s.mutuallyAuthenticate()
  }
docs: // Open initializes the secure channel.