type PEMCipher … const _ … const PEMCipherDES … const PEMCipher3DES … const PEMCipherAES128 … const PEMCipherAES192 … const PEMCipherAES256 … type rfc1423Algo … var rfc1423Algos … // deriveKey uses a key derivation function to stretch the password into a key // with the number of bits our cipher requires. This algorithm was derived from // the OpenSSL source. func (c rfc1423Algo) deriveKey(password, salt []byte) []byte { … } // IsEncryptedPEMBlock returns whether the PEM block is password encrypted // according to RFC 1423. // // Deprecated: Legacy PEM encryption as specified in RFC 1423 is insecure by // design. Since it does not authenticate the ciphertext, it is vulnerable to // padding oracle attacks that can let an attacker recover the plaintext. func IsEncryptedPEMBlock(b *pem.Block) bool { … } var IncorrectPasswordError … // DecryptPEMBlock takes a PEM block encrypted according to RFC 1423 and the // password used to encrypt it and returns a slice of decrypted DER encoded // bytes. It inspects the DEK-Info header to determine the algorithm used for // decryption. If no DEK-Info header is present, an error is returned. If an // incorrect password is detected an [IncorrectPasswordError] is returned. Because // of deficiencies in the format, it's not always possible to detect an // incorrect password. In these cases no error will be returned but the // decrypted DER bytes will be random noise. // // Deprecated: Legacy PEM encryption as specified in RFC 1423 is insecure by // design. Since it does not authenticate the ciphertext, it is vulnerable to // padding oracle attacks that can let an attacker recover the plaintext. func DecryptPEMBlock(b *pem.Block, password []byte) ([]byte, error) { … } // EncryptPEMBlock returns a PEM block of the specified type holding the // given DER encoded data encrypted with the specified algorithm and // password according to RFC 1423. // // Deprecated: Legacy PEM encryption as specified in RFC 1423 is insecure by // design. Since it does not authenticate the ciphertext, it is vulnerable to // padding oracle attacks that can let an attacker recover the plaintext. func EncryptPEMBlock(rand io.Reader, blockType string, data, password []byte, alg PEMCipher) (*pem.Block, error) { … } func cipherByName(name string) *rfc1423Algo { … } func cipherByKey(key PEMCipher) *rfc1423Algo { … }