func (key *PGPKeyBundle) ToServerSKB(gc *GlobalContext, tsec *triplesec.Cipher, gen PassphraseGeneration) (ret *SKB, err error) { ret = NewSKB(gc) var pk, sk bytes.Buffer // Need to serialize Private first, because err = key.Entity.SerializePrivate(&sk, nil) if err != nil { return } if tsec != nil { ret.Priv.Data, err = tsec.Encrypt(sk.Bytes()) ret.Priv.Encryption = int(triplesec.Version) // Version 3 is the current TripleSec version if err != nil { return } } else { ret.Priv.Data = sk.Bytes() ret.Priv.Encryption = 0 } ret.Priv.PassphraseGeneration = int(gen) err = key.Entity.Serialize(&pk) if err != nil { return } ret.Pub = pk.Bytes() ret.Type = key.GetAlgoType() return }
func (s *SKB) tsecUnlock(tsec *triplesec.Cipher) ([]byte, error) { unlocked, err := tsec.Decrypt(s.Priv.Data) if err != nil { if _, ok := err.(triplesec.BadPassphraseError); ok { err = PassphraseError{} } return nil, err } return unlocked, nil }