| // Copyright 2012 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| // Package pbkdf2 implements the key derivation function PBKDF2 as defined in |
| // RFC 8018 (PKCS #5 v2.1). |
| // |
| // This package is a wrapper for the PBKDF2 implementation in the |
| // [crypto/pbkdf2] package. It is [frozen] and is not accepting new features. |
| // |
| // [frozen]: https://go.dev/wiki/Frozen |
| package pbkdf2 |
| |
| import ( |
| "crypto/pbkdf2" |
| "hash" |
| ) |
| |
| // Key derives a key from the password, salt and iteration count, returning a |
| // []byte of length keylen that can be used as cryptographic key. The key is |
| // derived based on the method described as PBKDF2 with the HMAC variant using |
| // the supplied hash function. |
| func Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte { |
| out, err := pbkdf2.Key(h, string(password), salt, iter, keyLen) |
| if err != nil { |
| // FIPS 140 enforcement, or an invalid key length. |
| panic(err) |
| } |
| return out |
| } |