// DecryptDecryptInfo is used to extract a decryptInfo object by attempting decryption // with a given recipientKey. This must be attempted for each decryptInfo in the header // until one works or none work, as miniLock deliberately provides no indication of // intended recipients. func DecryptDecryptInfo(diEnc, nonce []byte, ephemPubkey, recipientKey *taber.Keys) (*DecryptInfoEntry, error) { plain, err := recipientKey.Decrypt(diEnc, nonce, ephemPubkey) if err != nil { return nil, ErrCannotDecrypt } di := new(DecryptInfoEntry) err = json.Unmarshal(plain, di) if err != nil { return nil, err } return di, nil }
// ExtractFileInfo pulls out the fileInfo object from the decryptInfo object, // authenticating encryption from the sender. func (di *DecryptInfoEntry) ExtractFileInfo(nonce []byte, recipientKey *taber.Keys) (*FileInfo, error) { // Return on failure: minilockutils.DecryptionError senderPubkey, err := di.SenderPubkey() if err != nil { return nil, err } plain, err := recipientKey.Decrypt(di.FileInfoEnc, nonce, senderPubkey) if err != nil { return nil, ErrCannotDecrypt } fi := new(FileInfo) err = json.Unmarshal(plain, fi) if err != nil { return nil, err } return fi, nil }