react-native-quick-crypto 1.1.5 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cpp/hkdf/HybridHkdf.cpp +25 -8
- package/cpp/hkdf/HybridHkdf.hpp +3 -2
- package/lib/commonjs/hkdf.js +73 -3
- package/lib/commonjs/hkdf.js.map +1 -1
- package/lib/module/hkdf.js +69 -3
- package/lib/module/hkdf.js.map +1 -1
- package/lib/typescript/hkdf.d.ts +4 -0
- package/lib/typescript/hkdf.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +4 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/specs/hkdf.nitro.d.ts +3 -2
- package/lib/typescript/specs/hkdf.nitro.d.ts.map +1 -1
- package/nitrogen/generated/shared/c++/HkdfMode.hpp +80 -0
- package/nitrogen/generated/shared/c++/HybridHkdfSpec.hpp +5 -3
- package/package.json +1 -1
- package/src/hkdf.ts +142 -0
- package/src/specs/hkdf.nitro.ts +6 -0
package/cpp/hkdf/HybridHkdf.cpp
CHANGED
|
@@ -12,23 +12,22 @@
|
|
|
12
12
|
|
|
13
13
|
namespace margelo::nitro::crypto {
|
|
14
14
|
|
|
15
|
-
std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>>
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const std::shared_ptr<ArrayBuffer>& info, double length) {
|
|
15
|
+
std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>>
|
|
16
|
+
HybridHkdf::deriveKey(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& key, const std::shared_ptr<ArrayBuffer>& salt,
|
|
17
|
+
const std::shared_ptr<ArrayBuffer>& info, double length, HkdfMode mode) {
|
|
19
18
|
// get owned NativeArrayBuffers before passing to sync function
|
|
20
19
|
auto nativeKey = ToNativeArrayBuffer(key);
|
|
21
20
|
auto nativeSalt = ToNativeArrayBuffer(salt);
|
|
22
21
|
auto nativeInfo = ToNativeArrayBuffer(info);
|
|
23
22
|
|
|
24
|
-
return Promise<std::shared_ptr<ArrayBuffer>>::async([this, algorithm, nativeKey, nativeSalt, nativeInfo, length]() {
|
|
25
|
-
return this->deriveKeySync(algorithm, nativeKey, nativeSalt, nativeInfo, length);
|
|
23
|
+
return Promise<std::shared_ptr<ArrayBuffer>>::async([this, algorithm, nativeKey, nativeSalt, nativeInfo, length, mode]() {
|
|
24
|
+
return this->deriveKeySync(algorithm, nativeKey, nativeSalt, nativeInfo, length, mode);
|
|
26
25
|
});
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
std::shared_ptr<ArrayBuffer> HybridHkdf::deriveKeySync(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& baseKey,
|
|
30
29
|
const std::shared_ptr<ArrayBuffer>& salt, const std::shared_ptr<ArrayBuffer>& info,
|
|
31
|
-
double length) {
|
|
30
|
+
double length, HkdfMode mode) {
|
|
32
31
|
EVP_KDF* kdf = EVP_KDF_fetch(nullptr, "HKDF", nullptr);
|
|
33
32
|
if (kdf == nullptr) {
|
|
34
33
|
throw std::runtime_error("Failed to fetch HKDF implementation: " + std::to_string(ERR_get_error()));
|
|
@@ -41,9 +40,27 @@ std::shared_ptr<ArrayBuffer> HybridHkdf::deriveKeySync(const std::string& algori
|
|
|
41
40
|
}
|
|
42
41
|
|
|
43
42
|
// Set up parameters
|
|
44
|
-
OSSL_PARAM params[
|
|
43
|
+
OSSL_PARAM params[6];
|
|
45
44
|
size_t paramIndex = 0;
|
|
46
45
|
|
|
46
|
+
// HKDF mode (RFC 5869): full extract+expand, extract-only (PRK), or expand-only.
|
|
47
|
+
int hkdfMode;
|
|
48
|
+
switch (mode) {
|
|
49
|
+
case HkdfMode::EXTRACT:
|
|
50
|
+
hkdfMode = EVP_KDF_HKDF_MODE_EXTRACT_ONLY;
|
|
51
|
+
break;
|
|
52
|
+
case HkdfMode::EXPAND:
|
|
53
|
+
hkdfMode = EVP_KDF_HKDF_MODE_EXPAND_ONLY;
|
|
54
|
+
break;
|
|
55
|
+
case HkdfMode::FULL:
|
|
56
|
+
hkdfMode = EVP_KDF_HKDF_MODE_EXTRACT_AND_EXPAND;
|
|
57
|
+
break;
|
|
58
|
+
default:
|
|
59
|
+
EVP_KDF_CTX_free(ctx);
|
|
60
|
+
throw std::runtime_error("Unknown HKDF mode");
|
|
61
|
+
}
|
|
62
|
+
params[paramIndex++] = OSSL_PARAM_construct_int(OSSL_KDF_PARAM_MODE, &hkdfMode);
|
|
63
|
+
|
|
47
64
|
params[paramIndex++] = OSSL_PARAM_construct_utf8_string(OSSL_KDF_PARAM_DIGEST, const_cast<char*>(algorithm.c_str()), 0);
|
|
48
65
|
|
|
49
66
|
// Key (Input Keying Material)
|
package/cpp/hkdf/HybridHkdf.hpp
CHANGED
|
@@ -19,10 +19,11 @@ class HybridHkdf : public HybridHkdfSpec {
|
|
|
19
19
|
// Methods
|
|
20
20
|
std::shared_ptr<ArrayBuffer> deriveKeySync(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& key,
|
|
21
21
|
const std::shared_ptr<ArrayBuffer>& salt, const std::shared_ptr<ArrayBuffer>& info,
|
|
22
|
-
double length) override;
|
|
22
|
+
double length, HkdfMode mode) override;
|
|
23
23
|
std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> deriveKey(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& key,
|
|
24
24
|
const std::shared_ptr<ArrayBuffer>& salt,
|
|
25
|
-
const std::shared_ptr<ArrayBuffer>& info, double length
|
|
25
|
+
const std::shared_ptr<ArrayBuffer>& info, double length,
|
|
26
|
+
HkdfMode mode) override;
|
|
26
27
|
};
|
|
27
28
|
|
|
28
29
|
} // namespace margelo::nitro::crypto
|
package/lib/commonjs/hkdf.js
CHANGED
|
@@ -5,6 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.hkdf = hkdf;
|
|
7
7
|
exports.hkdfDeriveBits = hkdfDeriveBits;
|
|
8
|
+
exports.hkdfExpand = hkdfExpand;
|
|
9
|
+
exports.hkdfExpandSync = hkdfExpandSync;
|
|
10
|
+
exports.hkdfExtract = hkdfExtract;
|
|
11
|
+
exports.hkdfExtractSync = hkdfExtractSync;
|
|
8
12
|
exports.hkdfSync = hkdfSync;
|
|
9
13
|
var _reactNativeBuffer = require("@craftzdog/react-native-buffer");
|
|
10
14
|
var _reactNativeNitroModules = require("react-native-nitro-modules");
|
|
@@ -46,6 +50,13 @@ const HKDF_HASH_BYTES = {
|
|
|
46
50
|
'sha3-512': 64,
|
|
47
51
|
ripemd160: 20
|
|
48
52
|
};
|
|
53
|
+
function hkdfHashLen(digest) {
|
|
54
|
+
const hashLen = HKDF_HASH_BYTES[digest.toLowerCase()];
|
|
55
|
+
if (hashLen === undefined) {
|
|
56
|
+
throw new TypeError(`Unsupported HKDF digest: ${digest}`);
|
|
57
|
+
}
|
|
58
|
+
return hashLen;
|
|
59
|
+
}
|
|
49
60
|
function validateHkdfKeylen(digest, keylen) {
|
|
50
61
|
if (typeof keylen !== 'number' || !Number.isFinite(keylen) || !Number.isInteger(keylen) || keylen < 0 || keylen > 0x7fff_ffff) {
|
|
51
62
|
throw new TypeError('Bad key length');
|
|
@@ -68,7 +79,7 @@ function hkdf(digest, key, salt, info, keylen, callback) {
|
|
|
68
79
|
const sanitizedInfo = sanitizeInput(info, 'Info');
|
|
69
80
|
validateHkdfKeylen(normalizedDigest, keylen);
|
|
70
81
|
const nativeMod = getNative();
|
|
71
|
-
nativeMod.deriveKey(normalizedDigest, sanitizedKey, sanitizedSalt, sanitizedInfo, keylen).then(res => {
|
|
82
|
+
nativeMod.deriveKey(normalizedDigest, sanitizedKey, sanitizedSalt, sanitizedInfo, keylen, 'full').then(res => {
|
|
72
83
|
callback(null, _reactNativeBuffer.Buffer.from(res));
|
|
73
84
|
}, err => {
|
|
74
85
|
callback(err);
|
|
@@ -84,9 +95,68 @@ function hkdfSync(digest, key, salt, info, keylen) {
|
|
|
84
95
|
const sanitizedInfo = sanitizeInput(info, 'Info');
|
|
85
96
|
validateHkdfKeylen(normalizedDigest, keylen);
|
|
86
97
|
const nativeMod = getNative();
|
|
87
|
-
const result = nativeMod.deriveKeySync(normalizedDigest, sanitizedKey, sanitizedSalt, sanitizedInfo, keylen);
|
|
98
|
+
const result = nativeMod.deriveKeySync(normalizedDigest, sanitizedKey, sanitizedSalt, sanitizedInfo, keylen, 'full');
|
|
99
|
+
return _reactNativeBuffer.Buffer.from(result);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// RFC 5869 §2.2 HKDF-Extract (sync): PRK = HMAC(salt, IKM). Salt defaults to
|
|
103
|
+
// a string of HashLen zeros when omitted. Returns a PRK of HashLen bytes.
|
|
104
|
+
function hkdfExtractSync(digest, ikm, salt = new Uint8Array(0)) {
|
|
105
|
+
const normalizedDigest = (0, _utils.normalizeHashName)(digest);
|
|
106
|
+
const hashLen = hkdfHashLen(normalizedDigest);
|
|
107
|
+
const sanitizedIkm = sanitizeInput(ikm, 'IKM');
|
|
108
|
+
const sanitizedSalt = sanitizeInput(salt, 'Salt');
|
|
109
|
+
const result = getNative().deriveKeySync(normalizedDigest, sanitizedIkm, sanitizedSalt, new ArrayBuffer(0), hashLen, 'extract');
|
|
110
|
+
return _reactNativeBuffer.Buffer.from(result);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Async HKDF-Extract, mirroring `hkdf`. Unlike the sync form, `salt` is
|
|
114
|
+
// required here because the callback occupies the trailing argument.
|
|
115
|
+
function hkdfExtract(digest, ikm, salt, callback) {
|
|
116
|
+
validateCallback(callback);
|
|
117
|
+
try {
|
|
118
|
+
const normalizedDigest = (0, _utils.normalizeHashName)(digest);
|
|
119
|
+
const hashLen = hkdfHashLen(normalizedDigest);
|
|
120
|
+
const sanitizedIkm = sanitizeInput(ikm, 'IKM');
|
|
121
|
+
const sanitizedSalt = sanitizeInput(salt, 'Salt');
|
|
122
|
+
getNative().deriveKey(normalizedDigest, sanitizedIkm, sanitizedSalt, new ArrayBuffer(0), hashLen, 'extract').then(res => callback(null, _reactNativeBuffer.Buffer.from(res)), err => callback(err));
|
|
123
|
+
} catch (err) {
|
|
124
|
+
callback(err);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// RFC 5869 §2.3 HKDF-Expand (sync): OKM = expand(PRK, info, L). `prk` must be
|
|
129
|
+
// at least HashLen bytes (a pseudorandom key, e.g. from hkdfExtract).
|
|
130
|
+
function hkdfExpandSync(digest, prk, info, keylen) {
|
|
131
|
+
const normalizedDigest = (0, _utils.normalizeHashName)(digest);
|
|
132
|
+
const hashLen = hkdfHashLen(normalizedDigest);
|
|
133
|
+
const sanitizedPrk = sanitizeInput(prk, 'PRK');
|
|
134
|
+
if (sanitizedPrk.byteLength < hashLen) {
|
|
135
|
+
throw new RangeError(`HKDF-Expand PRK must be at least HashLen (${hashLen}) bytes for ${digest}`);
|
|
136
|
+
}
|
|
137
|
+
const sanitizedInfo = sanitizeInput(info, 'Info');
|
|
138
|
+
validateHkdfKeylen(normalizedDigest, keylen);
|
|
139
|
+
const result = getNative().deriveKeySync(normalizedDigest, sanitizedPrk, new ArrayBuffer(0), sanitizedInfo, keylen, 'expand');
|
|
88
140
|
return _reactNativeBuffer.Buffer.from(result);
|
|
89
141
|
}
|
|
142
|
+
|
|
143
|
+
// Async HKDF-Expand, mirroring `hkdf`.
|
|
144
|
+
function hkdfExpand(digest, prk, info, keylen, callback) {
|
|
145
|
+
validateCallback(callback);
|
|
146
|
+
try {
|
|
147
|
+
const normalizedDigest = (0, _utils.normalizeHashName)(digest);
|
|
148
|
+
const hashLen = hkdfHashLen(normalizedDigest);
|
|
149
|
+
const sanitizedPrk = sanitizeInput(prk, 'PRK');
|
|
150
|
+
if (sanitizedPrk.byteLength < hashLen) {
|
|
151
|
+
throw new RangeError(`HKDF-Expand PRK must be at least HashLen (${hashLen}) bytes for ${digest}`);
|
|
152
|
+
}
|
|
153
|
+
const sanitizedInfo = sanitizeInput(info, 'Info');
|
|
154
|
+
validateHkdfKeylen(normalizedDigest, keylen);
|
|
155
|
+
getNative().deriveKey(normalizedDigest, sanitizedPrk, new ArrayBuffer(0), sanitizedInfo, keylen, 'expand').then(res => callback(null, _reactNativeBuffer.Buffer.from(res)), err => callback(err));
|
|
156
|
+
} catch (err) {
|
|
157
|
+
callback(err);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
90
160
|
function hkdfDeriveBits(algorithm, baseKey, length) {
|
|
91
161
|
const hash = algorithm.hash;
|
|
92
162
|
const salt = algorithm.salt;
|
|
@@ -102,7 +172,7 @@ function hkdfDeriveBits(algorithm, baseKey, length) {
|
|
|
102
172
|
const normalizedDigest = (0, _utils.normalizeHashName)(hashName);
|
|
103
173
|
validateHkdfKeylen(normalizedDigest, keylen);
|
|
104
174
|
const nativeMod = getNative();
|
|
105
|
-
const result = nativeMod.deriveKeySync(normalizedDigest, (0, _utils.binaryLikeToArrayBuffer)(keyBuffer), (0, _utils.binaryLikeToArrayBuffer)(salt), (0, _utils.binaryLikeToArrayBuffer)(info), keylen);
|
|
175
|
+
const result = nativeMod.deriveKeySync(normalizedDigest, (0, _utils.binaryLikeToArrayBuffer)(keyBuffer), (0, _utils.binaryLikeToArrayBuffer)(salt), (0, _utils.binaryLikeToArrayBuffer)(info), keylen, 'full');
|
|
106
176
|
return result;
|
|
107
177
|
}
|
|
108
178
|
//# sourceMappingURL=hkdf.js.map
|
package/lib/commonjs/hkdf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeBuffer","require","_reactNativeNitroModules","_utils","native","getNative","NitroModules","createHybridObject","validateCallback","callback","undefined","Error","sanitizeInput","input","name","binaryLikeToArrayBuffer","HKDF_HASH_BYTES","sha1","sha224","sha256","sha384","sha512","ripemd160","
|
|
1
|
+
{"version":3,"names":["_reactNativeBuffer","require","_reactNativeNitroModules","_utils","native","getNative","NitroModules","createHybridObject","validateCallback","callback","undefined","Error","sanitizeInput","input","name","binaryLikeToArrayBuffer","HKDF_HASH_BYTES","sha1","sha224","sha256","sha384","sha512","ripemd160","hkdfHashLen","digest","hashLen","toLowerCase","TypeError","validateHkdfKeylen","keylen","Number","isFinite","isInteger","RangeError","hkdf","key","salt","info","normalizedDigest","normalizeHashName","sanitizedKey","sanitizedSalt","sanitizedInfo","nativeMod","deriveKey","then","res","Buffer","from","err","hkdfSync","result","deriveKeySync","hkdfExtractSync","ikm","Uint8Array","sanitizedIkm","ArrayBuffer","hkdfExtract","hkdfExpandSync","prk","sanitizedPrk","byteLength","hkdfExpand","hkdfDeriveBits","algorithm","baseKey","length","hash","keyBuffer","keyObject","export","Math","ceil","hashName"],"sourceRoot":"../../src","sources":["hkdf.ts"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,wBAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AAmBA;AACA,IAAIG,MAAkB;AACtB,SAASC,SAASA,CAAA,EAAe;EAC/B,IAAID,MAAM,IAAI,IAAI,EAAE;IAClBA,MAAM,GAAGE,qCAAY,CAACC,kBAAkB,CAAa,MAAM,CAAC;EAC9D;EACA,OAAOH,MAAM;AACf;AAEA,SAASI,gBAAgBA,CAACC,QAAsB,EAAE;EAChD,IAAIA,QAAQ,KAAKC,SAAS,IAAI,OAAOD,QAAQ,KAAK,UAAU,EAAE;IAC5D,MAAM,IAAIE,KAAK,CAAC,8BAA8B,CAAC;EACjD;AACF;AAEA,SAASC,aAAaA,CAACC,KAAiB,EAAEC,IAAY,EAAe;EACnE,IAAI;IACF,OAAO,IAAAC,8BAAuB,EAACF,KAAK,CAAC;EACvC,CAAC,CAAC,MAAM;IACN,MAAM,IAAIF,KAAK,CACb,GAAGG,IAAI,2DACT,CAAC;EACH;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,MAAME,eAAiD,GAAG;EACxDC,IAAI,EAAE,EAAE;EACRC,MAAM,EAAE,EAAE;EACVC,MAAM,EAAE,EAAE;EACVC,MAAM,EAAE,EAAE;EACVC,MAAM,EAAE,EAAE;EACV,UAAU,EAAE,EAAE;EACd,UAAU,EAAE,EAAE;EACd,UAAU,EAAE,EAAE;EACdC,SAAS,EAAE;AACb,CAAC;AAED,SAASC,WAAWA,CAACC,MAAc,EAAU;EAC3C,MAAMC,OAAO,GAAGT,eAAe,CAACQ,MAAM,CAACE,WAAW,CAAC,CAAC,CAAC;EACrD,IAAID,OAAO,KAAKf,SAAS,EAAE;IACzB,MAAM,IAAIiB,SAAS,CAAC,4BAA4BH,MAAM,EAAE,CAAC;EAC3D;EACA,OAAOC,OAAO;AAChB;AAEA,SAASG,kBAAkBA,CAACJ,MAAc,EAAEK,MAAc,EAAQ;EAChE,IACE,OAAOA,MAAM,KAAK,QAAQ,IAC1B,CAACC,MAAM,CAACC,QAAQ,CAACF,MAAM,CAAC,IACxB,CAACC,MAAM,CAACE,SAAS,CAACH,MAAM,CAAC,IACzBA,MAAM,GAAG,CAAC,IACVA,MAAM,GAAG,WAAW,EACpB;IACA,MAAM,IAAIF,SAAS,CAAC,gBAAgB,CAAC;EACvC;EACA,MAAMF,OAAO,GAAGT,eAAe,CAACQ,MAAM,CAACE,WAAW,CAAC,CAAC,CAAC;EACrD,IAAID,OAAO,KAAKf,SAAS,EAAE;IACzB,MAAM,IAAIiB,SAAS,CAAC,4BAA4BH,MAAM,EAAE,CAAC;EAC3D;EACA;EACA,IAAIK,MAAM,GAAG,GAAG,GAAGJ,OAAO,EAAE;IAC1B,MAAM,IAAIQ,UAAU,CAClB,eAAeJ,MAAM,4BAA4B,GAC/C,kBAAkB,GAAG,GAAGJ,OAAO,SAASD,MAAM,EAClD,CAAC;EACH;AACF;AAEO,SAASU,IAAIA,CAClBV,MAAc,EACdW,GAAgB,EAChBC,IAAU,EACVC,IAAU,EACVR,MAAc,EACdpB,QAAsB,EAChB;EACND,gBAAgB,CAACC,QAAQ,CAAC;EAE1B,IAAI;IACF,MAAM6B,gBAAgB,GAAG,IAAAC,wBAAiB,EAACf,MAAM,CAAC;IAClD,MAAMgB,YAAY,GAAG5B,aAAa,CAACuB,GAAG,EAAE,KAAK,CAAC;IAC9C,MAAMM,aAAa,GAAG7B,aAAa,CAACwB,IAAI,EAAE,MAAM,CAAC;IACjD,MAAMM,aAAa,GAAG9B,aAAa,CAACyB,IAAI,EAAE,MAAM,CAAC;IAEjDT,kBAAkB,CAACU,gBAAgB,EAAET,MAAM,CAAC;IAE5C,MAAMc,SAAS,GAAGtC,SAAS,CAAC,CAAC;IAC7BsC,SAAS,CACNC,SAAS,CACRN,gBAAgB,EAChBE,YAAY,EACZC,aAAa,EACbC,aAAa,EACbb,MAAM,EACN,MACF,CAAC,CACAgB,IAAI,CACHC,GAAG,IAAI;MACLrC,QAAQ,CAAC,IAAI,EAAEsC,yBAAM,CAACC,IAAI,CAACF,GAAG,CAAC,CAAC;IAClC,CAAC,EACDG,GAAG,IAAI;MACLxC,QAAQ,CAACwC,GAAG,CAAC;IACf,CACF,CAAC;EACL,CAAC,CAAC,OAAOA,GAAG,EAAE;IACZxC,QAAQ,CAACwC,GAAY,CAAC;EACxB;AACF;AAEO,SAASC,QAAQA,CACtB1B,MAAc,EACdW,GAAgB,EAChBC,IAAU,EACVC,IAAU,EACVR,MAAc,EACN;EACR,MAAMS,gBAAgB,GAAG,IAAAC,wBAAiB,EAACf,MAAM,CAAC;EAClD,MAAMgB,YAAY,GAAG5B,aAAa,CAACuB,GAAG,EAAE,KAAK,CAAC;EAC9C,MAAMM,aAAa,GAAG7B,aAAa,CAACwB,IAAI,EAAE,MAAM,CAAC;EACjD,MAAMM,aAAa,GAAG9B,aAAa,CAACyB,IAAI,EAAE,MAAM,CAAC;EAEjDT,kBAAkB,CAACU,gBAAgB,EAAET,MAAM,CAAC;EAE5C,MAAMc,SAAS,GAAGtC,SAAS,CAAC,CAAC;EAC7B,MAAM8C,MAAM,GAAGR,SAAS,CAACS,aAAa,CACpCd,gBAAgB,EAChBE,YAAY,EACZC,aAAa,EACbC,aAAa,EACbb,MAAM,EACN,MACF,CAAC;EAED,OAAOkB,yBAAM,CAACC,IAAI,CAACG,MAAM,CAAC;AAC5B;;AAEA;AACA;AACO,SAASE,eAAeA,CAC7B7B,MAAc,EACd8B,GAAgB,EAChBlB,IAAU,GAAG,IAAImB,UAAU,CAAC,CAAC,CAAC,EACtB;EACR,MAAMjB,gBAAgB,GAAG,IAAAC,wBAAiB,EAACf,MAAM,CAAC;EAClD,MAAMC,OAAO,GAAGF,WAAW,CAACe,gBAAgB,CAAC;EAC7C,MAAMkB,YAAY,GAAG5C,aAAa,CAAC0C,GAAG,EAAE,KAAK,CAAC;EAC9C,MAAMb,aAAa,GAAG7B,aAAa,CAACwB,IAAI,EAAE,MAAM,CAAC;EAEjD,MAAMe,MAAM,GAAG9C,SAAS,CAAC,CAAC,CAAC+C,aAAa,CACtCd,gBAAgB,EAChBkB,YAAY,EACZf,aAAa,EACb,IAAIgB,WAAW,CAAC,CAAC,CAAC,EAClBhC,OAAO,EACP,SACF,CAAC;EAED,OAAOsB,yBAAM,CAACC,IAAI,CAACG,MAAM,CAAC;AAC5B;;AAEA;AACA;AACO,SAASO,WAAWA,CACzBlC,MAAc,EACd8B,GAAgB,EAChBlB,IAAU,EACV3B,QAAsB,EAChB;EACND,gBAAgB,CAACC,QAAQ,CAAC;EAE1B,IAAI;IACF,MAAM6B,gBAAgB,GAAG,IAAAC,wBAAiB,EAACf,MAAM,CAAC;IAClD,MAAMC,OAAO,GAAGF,WAAW,CAACe,gBAAgB,CAAC;IAC7C,MAAMkB,YAAY,GAAG5C,aAAa,CAAC0C,GAAG,EAAE,KAAK,CAAC;IAC9C,MAAMb,aAAa,GAAG7B,aAAa,CAACwB,IAAI,EAAE,MAAM,CAAC;IAEjD/B,SAAS,CAAC,CAAC,CACRuC,SAAS,CACRN,gBAAgB,EAChBkB,YAAY,EACZf,aAAa,EACb,IAAIgB,WAAW,CAAC,CAAC,CAAC,EAClBhC,OAAO,EACP,SACF,CAAC,CACAoB,IAAI,CACHC,GAAG,IAAIrC,QAAQ,CAAC,IAAI,EAAEsC,yBAAM,CAACC,IAAI,CAACF,GAAG,CAAC,CAAC,EACvCG,GAAG,IAAIxC,QAAQ,CAACwC,GAAG,CACrB,CAAC;EACL,CAAC,CAAC,OAAOA,GAAG,EAAE;IACZxC,QAAQ,CAACwC,GAAY,CAAC;EACxB;AACF;;AAEA;AACA;AACO,SAASU,cAAcA,CAC5BnC,MAAc,EACdoC,GAAgB,EAChBvB,IAAU,EACVR,MAAc,EACN;EACR,MAAMS,gBAAgB,GAAG,IAAAC,wBAAiB,EAACf,MAAM,CAAC;EAClD,MAAMC,OAAO,GAAGF,WAAW,CAACe,gBAAgB,CAAC;EAC7C,MAAMuB,YAAY,GAAGjD,aAAa,CAACgD,GAAG,EAAE,KAAK,CAAC;EAC9C,IAAIC,YAAY,CAACC,UAAU,GAAGrC,OAAO,EAAE;IACrC,MAAM,IAAIQ,UAAU,CAClB,6CAA6CR,OAAO,eAAeD,MAAM,EAC3E,CAAC;EACH;EACA,MAAMkB,aAAa,GAAG9B,aAAa,CAACyB,IAAI,EAAE,MAAM,CAAC;EAEjDT,kBAAkB,CAACU,gBAAgB,EAAET,MAAM,CAAC;EAE5C,MAAMsB,MAAM,GAAG9C,SAAS,CAAC,CAAC,CAAC+C,aAAa,CACtCd,gBAAgB,EAChBuB,YAAY,EACZ,IAAIJ,WAAW,CAAC,CAAC,CAAC,EAClBf,aAAa,EACbb,MAAM,EACN,QACF,CAAC;EAED,OAAOkB,yBAAM,CAACC,IAAI,CAACG,MAAM,CAAC;AAC5B;;AAEA;AACO,SAASY,UAAUA,CACxBvC,MAAc,EACdoC,GAAgB,EAChBvB,IAAU,EACVR,MAAc,EACdpB,QAAsB,EAChB;EACND,gBAAgB,CAACC,QAAQ,CAAC;EAE1B,IAAI;IACF,MAAM6B,gBAAgB,GAAG,IAAAC,wBAAiB,EAACf,MAAM,CAAC;IAClD,MAAMC,OAAO,GAAGF,WAAW,CAACe,gBAAgB,CAAC;IAC7C,MAAMuB,YAAY,GAAGjD,aAAa,CAACgD,GAAG,EAAE,KAAK,CAAC;IAC9C,IAAIC,YAAY,CAACC,UAAU,GAAGrC,OAAO,EAAE;MACrC,MAAM,IAAIQ,UAAU,CAClB,6CAA6CR,OAAO,eAAeD,MAAM,EAC3E,CAAC;IACH;IACA,MAAMkB,aAAa,GAAG9B,aAAa,CAACyB,IAAI,EAAE,MAAM,CAAC;IAEjDT,kBAAkB,CAACU,gBAAgB,EAAET,MAAM,CAAC;IAE5CxB,SAAS,CAAC,CAAC,CACRuC,SAAS,CACRN,gBAAgB,EAChBuB,YAAY,EACZ,IAAIJ,WAAW,CAAC,CAAC,CAAC,EAClBf,aAAa,EACbb,MAAM,EACN,QACF,CAAC,CACAgB,IAAI,CACHC,GAAG,IAAIrC,QAAQ,CAAC,IAAI,EAAEsC,yBAAM,CAACC,IAAI,CAACF,GAAG,CAAC,CAAC,EACvCG,GAAG,IAAIxC,QAAQ,CAACwC,GAAG,CACrB,CAAC;EACL,CAAC,CAAC,OAAOA,GAAG,EAAE;IACZxC,QAAQ,CAACwC,GAAY,CAAC;EACxB;AACF;AAEO,SAASe,cAAcA,CAC5BC,SAAwB,EACxBC,OAAkB,EAClBC,MAAc,EACD;EACb,MAAMC,IAAI,GAAGH,SAAS,CAACG,IAAI;EAC3B,MAAMhC,IAAI,GAAG6B,SAAS,CAAC7B,IAAI;EAC3B,MAAMC,IAAI,GAAG4B,SAAS,CAAC5B,IAAI;;EAE3B;EACA;EACA,MAAMgC,SAAS,GAAGH,OAAO,CAACI,SAAS,CAACC,MAAM,CAAC,CAAC;;EAE5C;EACA,MAAM1C,MAAM,GAAG2C,IAAI,CAACC,IAAI,CAACN,MAAM,GAAG,CAAC,CAAC;EAEpC,MAAMO,QAAQ,GAAG,OAAON,IAAI,KAAK,QAAQ,GAAGA,IAAI,GAAGA,IAAI,CAACtD,IAAI;EAC5D,MAAMwB,gBAAgB,GAAG,IAAAC,wBAAiB,EAACmC,QAAQ,CAAC;EAEpD9C,kBAAkB,CAACU,gBAAgB,EAAET,MAAM,CAAC;EAE5C,MAAMc,SAAS,GAAGtC,SAAS,CAAC,CAAC;EAC7B,MAAM8C,MAAM,GAAGR,SAAS,CAACS,aAAa,CACpCd,gBAAgB,EAChB,IAAAvB,8BAAuB,EAACsD,SAAS,CAAC,EAClC,IAAAtD,8BAAuB,EAACqB,IAAI,CAAC,EAC7B,IAAArB,8BAAuB,EAACsB,IAAI,CAAC,EAC7BR,MAAM,EACN,MACF,CAAC;EAED,OAAOsB,MAAM;AACf","ignoreList":[]}
|
package/lib/module/hkdf.js
CHANGED
|
@@ -40,6 +40,13 @@ const HKDF_HASH_BYTES = {
|
|
|
40
40
|
'sha3-512': 64,
|
|
41
41
|
ripemd160: 20
|
|
42
42
|
};
|
|
43
|
+
function hkdfHashLen(digest) {
|
|
44
|
+
const hashLen = HKDF_HASH_BYTES[digest.toLowerCase()];
|
|
45
|
+
if (hashLen === undefined) {
|
|
46
|
+
throw new TypeError(`Unsupported HKDF digest: ${digest}`);
|
|
47
|
+
}
|
|
48
|
+
return hashLen;
|
|
49
|
+
}
|
|
43
50
|
function validateHkdfKeylen(digest, keylen) {
|
|
44
51
|
if (typeof keylen !== 'number' || !Number.isFinite(keylen) || !Number.isInteger(keylen) || keylen < 0 || keylen > 0x7fff_ffff) {
|
|
45
52
|
throw new TypeError('Bad key length');
|
|
@@ -62,7 +69,7 @@ export function hkdf(digest, key, salt, info, keylen, callback) {
|
|
|
62
69
|
const sanitizedInfo = sanitizeInput(info, 'Info');
|
|
63
70
|
validateHkdfKeylen(normalizedDigest, keylen);
|
|
64
71
|
const nativeMod = getNative();
|
|
65
|
-
nativeMod.deriveKey(normalizedDigest, sanitizedKey, sanitizedSalt, sanitizedInfo, keylen).then(res => {
|
|
72
|
+
nativeMod.deriveKey(normalizedDigest, sanitizedKey, sanitizedSalt, sanitizedInfo, keylen, 'full').then(res => {
|
|
66
73
|
callback(null, Buffer.from(res));
|
|
67
74
|
}, err => {
|
|
68
75
|
callback(err);
|
|
@@ -78,9 +85,68 @@ export function hkdfSync(digest, key, salt, info, keylen) {
|
|
|
78
85
|
const sanitizedInfo = sanitizeInput(info, 'Info');
|
|
79
86
|
validateHkdfKeylen(normalizedDigest, keylen);
|
|
80
87
|
const nativeMod = getNative();
|
|
81
|
-
const result = nativeMod.deriveKeySync(normalizedDigest, sanitizedKey, sanitizedSalt, sanitizedInfo, keylen);
|
|
88
|
+
const result = nativeMod.deriveKeySync(normalizedDigest, sanitizedKey, sanitizedSalt, sanitizedInfo, keylen, 'full');
|
|
89
|
+
return Buffer.from(result);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// RFC 5869 §2.2 HKDF-Extract (sync): PRK = HMAC(salt, IKM). Salt defaults to
|
|
93
|
+
// a string of HashLen zeros when omitted. Returns a PRK of HashLen bytes.
|
|
94
|
+
export function hkdfExtractSync(digest, ikm, salt = new Uint8Array(0)) {
|
|
95
|
+
const normalizedDigest = normalizeHashName(digest);
|
|
96
|
+
const hashLen = hkdfHashLen(normalizedDigest);
|
|
97
|
+
const sanitizedIkm = sanitizeInput(ikm, 'IKM');
|
|
98
|
+
const sanitizedSalt = sanitizeInput(salt, 'Salt');
|
|
99
|
+
const result = getNative().deriveKeySync(normalizedDigest, sanitizedIkm, sanitizedSalt, new ArrayBuffer(0), hashLen, 'extract');
|
|
100
|
+
return Buffer.from(result);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Async HKDF-Extract, mirroring `hkdf`. Unlike the sync form, `salt` is
|
|
104
|
+
// required here because the callback occupies the trailing argument.
|
|
105
|
+
export function hkdfExtract(digest, ikm, salt, callback) {
|
|
106
|
+
validateCallback(callback);
|
|
107
|
+
try {
|
|
108
|
+
const normalizedDigest = normalizeHashName(digest);
|
|
109
|
+
const hashLen = hkdfHashLen(normalizedDigest);
|
|
110
|
+
const sanitizedIkm = sanitizeInput(ikm, 'IKM');
|
|
111
|
+
const sanitizedSalt = sanitizeInput(salt, 'Salt');
|
|
112
|
+
getNative().deriveKey(normalizedDigest, sanitizedIkm, sanitizedSalt, new ArrayBuffer(0), hashLen, 'extract').then(res => callback(null, Buffer.from(res)), err => callback(err));
|
|
113
|
+
} catch (err) {
|
|
114
|
+
callback(err);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// RFC 5869 §2.3 HKDF-Expand (sync): OKM = expand(PRK, info, L). `prk` must be
|
|
119
|
+
// at least HashLen bytes (a pseudorandom key, e.g. from hkdfExtract).
|
|
120
|
+
export function hkdfExpandSync(digest, prk, info, keylen) {
|
|
121
|
+
const normalizedDigest = normalizeHashName(digest);
|
|
122
|
+
const hashLen = hkdfHashLen(normalizedDigest);
|
|
123
|
+
const sanitizedPrk = sanitizeInput(prk, 'PRK');
|
|
124
|
+
if (sanitizedPrk.byteLength < hashLen) {
|
|
125
|
+
throw new RangeError(`HKDF-Expand PRK must be at least HashLen (${hashLen}) bytes for ${digest}`);
|
|
126
|
+
}
|
|
127
|
+
const sanitizedInfo = sanitizeInput(info, 'Info');
|
|
128
|
+
validateHkdfKeylen(normalizedDigest, keylen);
|
|
129
|
+
const result = getNative().deriveKeySync(normalizedDigest, sanitizedPrk, new ArrayBuffer(0), sanitizedInfo, keylen, 'expand');
|
|
82
130
|
return Buffer.from(result);
|
|
83
131
|
}
|
|
132
|
+
|
|
133
|
+
// Async HKDF-Expand, mirroring `hkdf`.
|
|
134
|
+
export function hkdfExpand(digest, prk, info, keylen, callback) {
|
|
135
|
+
validateCallback(callback);
|
|
136
|
+
try {
|
|
137
|
+
const normalizedDigest = normalizeHashName(digest);
|
|
138
|
+
const hashLen = hkdfHashLen(normalizedDigest);
|
|
139
|
+
const sanitizedPrk = sanitizeInput(prk, 'PRK');
|
|
140
|
+
if (sanitizedPrk.byteLength < hashLen) {
|
|
141
|
+
throw new RangeError(`HKDF-Expand PRK must be at least HashLen (${hashLen}) bytes for ${digest}`);
|
|
142
|
+
}
|
|
143
|
+
const sanitizedInfo = sanitizeInput(info, 'Info');
|
|
144
|
+
validateHkdfKeylen(normalizedDigest, keylen);
|
|
145
|
+
getNative().deriveKey(normalizedDigest, sanitizedPrk, new ArrayBuffer(0), sanitizedInfo, keylen, 'expand').then(res => callback(null, Buffer.from(res)), err => callback(err));
|
|
146
|
+
} catch (err) {
|
|
147
|
+
callback(err);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
84
150
|
export function hkdfDeriveBits(algorithm, baseKey, length) {
|
|
85
151
|
const hash = algorithm.hash;
|
|
86
152
|
const salt = algorithm.salt;
|
|
@@ -96,7 +162,7 @@ export function hkdfDeriveBits(algorithm, baseKey, length) {
|
|
|
96
162
|
const normalizedDigest = normalizeHashName(hashName);
|
|
97
163
|
validateHkdfKeylen(normalizedDigest, keylen);
|
|
98
164
|
const nativeMod = getNative();
|
|
99
|
-
const result = nativeMod.deriveKeySync(normalizedDigest, binaryLikeToArrayBuffer(keyBuffer), binaryLikeToArrayBuffer(salt), binaryLikeToArrayBuffer(info), keylen);
|
|
165
|
+
const result = nativeMod.deriveKeySync(normalizedDigest, binaryLikeToArrayBuffer(keyBuffer), binaryLikeToArrayBuffer(salt), binaryLikeToArrayBuffer(info), keylen, 'full');
|
|
100
166
|
return result;
|
|
101
167
|
}
|
|
102
168
|
//# sourceMappingURL=hkdf.js.map
|
package/lib/module/hkdf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Buffer","NitroModules","binaryLikeToArrayBuffer","normalizeHashName","native","getNative","createHybridObject","validateCallback","callback","undefined","Error","sanitizeInput","input","name","HKDF_HASH_BYTES","sha1","sha224","sha256","sha384","sha512","ripemd160","
|
|
1
|
+
{"version":3,"names":["Buffer","NitroModules","binaryLikeToArrayBuffer","normalizeHashName","native","getNative","createHybridObject","validateCallback","callback","undefined","Error","sanitizeInput","input","name","HKDF_HASH_BYTES","sha1","sha224","sha256","sha384","sha512","ripemd160","hkdfHashLen","digest","hashLen","toLowerCase","TypeError","validateHkdfKeylen","keylen","Number","isFinite","isInteger","RangeError","hkdf","key","salt","info","normalizedDigest","sanitizedKey","sanitizedSalt","sanitizedInfo","nativeMod","deriveKey","then","res","from","err","hkdfSync","result","deriveKeySync","hkdfExtractSync","ikm","Uint8Array","sanitizedIkm","ArrayBuffer","hkdfExtract","hkdfExpandSync","prk","sanitizedPrk","byteLength","hkdfExpand","hkdfDeriveBits","algorithm","baseKey","length","hash","keyBuffer","keyObject","export","Math","ceil","hashName"],"sourceRoot":"../../src","sources":["hkdf.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/typescript/hkdf.d.ts
CHANGED
|
@@ -17,6 +17,10 @@ export interface HkdfCallback {
|
|
|
17
17
|
}
|
|
18
18
|
export declare function hkdf(digest: string, key: KeyMaterial, salt: Salt, info: Info, keylen: number, callback: HkdfCallback): void;
|
|
19
19
|
export declare function hkdfSync(digest: string, key: KeyMaterial, salt: Salt, info: Info, keylen: number): Buffer;
|
|
20
|
+
export declare function hkdfExtractSync(digest: string, ikm: KeyMaterial, salt?: Salt): Buffer;
|
|
21
|
+
export declare function hkdfExtract(digest: string, ikm: KeyMaterial, salt: Salt, callback: HkdfCallback): void;
|
|
22
|
+
export declare function hkdfExpandSync(digest: string, prk: KeyMaterial, info: Info, keylen: number): Buffer;
|
|
23
|
+
export declare function hkdfExpand(digest: string, prk: KeyMaterial, info: Info, keylen: number, callback: HkdfCallback): void;
|
|
20
24
|
export declare function hkdfDeriveBits(algorithm: HkdfAlgorithm, baseKey: CryptoKey, length: number): ArrayBuffer;
|
|
21
25
|
export {};
|
|
22
26
|
//# sourceMappingURL=hkdf.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hkdf.d.ts","sourceRoot":"","sources":["../../src/hkdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAIxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,KAAK,WAAW,GAAG,UAAU,CAAC;AAC9B,KAAK,IAAI,GAAG,UAAU,CAAC;AACvB,KAAK,IAAI,GAAG,UAAU,CAAC;AAEvB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChD;
|
|
1
|
+
{"version":3,"file":"hkdf.d.ts","sourceRoot":"","sources":["../../src/hkdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAIxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,KAAK,WAAW,GAAG,UAAU,CAAC;AAC9B,KAAK,IAAI,GAAG,UAAU,CAAC;AACvB,KAAK,IAAI,GAAG,UAAU,CAAC;AAEvB,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChD;AA2ED,wBAAgB,IAAI,CAClB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,GACrB,IAAI,CAgCN;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GACb,MAAM,CAmBR;AAID,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,WAAW,EAChB,IAAI,GAAE,IAAwB,GAC7B,MAAM,CAgBR;AAID,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,YAAY,GACrB,IAAI,CAyBN;AAID,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GACb,MAAM,CAuBR;AAGD,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,GACrB,IAAI,CAgCN;AAED,wBAAgB,cAAc,CAC5B,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,MAAM,GACb,WAAW,CA4Bb"}
|
|
@@ -139,6 +139,10 @@ declare const QuickCrypto: {
|
|
|
139
139
|
pbkdf2DeriveBits(algorithm: utils.SubtleAlgorithm, baseKey: keys.CryptoKey, length: number): Promise<ArrayBuffer>;
|
|
140
140
|
hkdf(digest: string, key: utils.BinaryLike, salt: utils.BinaryLike, info: utils.BinaryLike, keylen: number, callback: hkdf.HkdfCallback): void;
|
|
141
141
|
hkdfSync(digest: string, key: utils.BinaryLike, salt: utils.BinaryLike, info: utils.BinaryLike, keylen: number): Buffer;
|
|
142
|
+
hkdfExtractSync(digest: string, ikm: utils.BinaryLike, salt?: utils.BinaryLike): Buffer;
|
|
143
|
+
hkdfExtract(digest: string, ikm: utils.BinaryLike, salt: utils.BinaryLike, callback: hkdf.HkdfCallback): void;
|
|
144
|
+
hkdfExpandSync(digest: string, prk: utils.BinaryLike, info: utils.BinaryLike, keylen: number): Buffer;
|
|
145
|
+
hkdfExpand(digest: string, prk: utils.BinaryLike, info: utils.BinaryLike, keylen: number, callback: hkdf.HkdfCallback): void;
|
|
142
146
|
hkdfDeriveBits(algorithm: hkdf.HkdfAlgorithm, baseKey: keys.CryptoKey, length: number): ArrayBuffer;
|
|
143
147
|
createHmac: typeof import("./hmac").createHmac;
|
|
144
148
|
createHash: typeof import("./hash").createHash;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAGxD,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,mBAAmB,EAAE,CACvB,CAAC,EAAE,MAAM,EACT,gBAAgB,CAAC,EAAE,OAAO,KACvB,WAAW,CAAC;IAEjB,IAAI,qBAAqB,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC;CAC1E;AAGD,OAAO,KAAK,YAAY,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,MAAM,CAAC;AAG3B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAEnC;;;GAGG;AACH,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAmFqK,cAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BArF3L,yCAA+B,EAAC,YAAe;qBAiC5C,0BACN,EACE,2EAA2E;IAC3E,2BADoB;qBA8BlB,oCACS,EAAC,2BACA;;;;;;qIAkBkhE,CAAC;mKAA85B,CAAC;;;;;;;;;;;;;;+DApB97F,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAGxD,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,mBAAmB,EAAE,CACvB,CAAC,EAAE,MAAM,EACT,gBAAgB,CAAC,EAAE,OAAO,KACvB,WAAW,CAAC;IAEjB,IAAI,qBAAqB,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC;CAC1E;AAGD,OAAO,KAAK,YAAY,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,MAAM,CAAC;AAG3B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAEnC;;;GAGG;AACH,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAmFqK,cAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BArF3L,yCAA+B,EAAC,YAAe;qBAiC5C,0BACN,EACE,2EAA2E;IAC3E,2BADoB;qBA8BlB,oCACS,EAAC,2BACA;;;;;;qIAkBkhE,CAAC;mKAA85B,CAAC;;;;;;;;;;;;;;+DApB97F,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAlDD,CAAD;gBAEC,CAAF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,YAYnB,CAAC;AAYF,eAAe,WAAW,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxE,cAAc,UAAU,CAAC;AACzB,cAAc,MAAM,CAAC;AACrB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
export type HkdfMode = 'full' | 'extract' | 'expand';
|
|
2
3
|
export interface Hkdf extends HybridObject<{
|
|
3
4
|
ios: 'c++';
|
|
4
5
|
android: 'c++';
|
|
5
6
|
}> {
|
|
6
|
-
deriveKeySync(algorithm: string, key: ArrayBuffer, salt: ArrayBuffer, info: ArrayBuffer, length: number): ArrayBuffer;
|
|
7
|
-
deriveKey(algorithm: string, key: ArrayBuffer, salt: ArrayBuffer, info: ArrayBuffer, length: number): Promise<ArrayBuffer>;
|
|
7
|
+
deriveKeySync(algorithm: string, key: ArrayBuffer, salt: ArrayBuffer, info: ArrayBuffer, length: number, mode: HkdfMode): ArrayBuffer;
|
|
8
|
+
deriveKey(algorithm: string, key: ArrayBuffer, salt: ArrayBuffer, info: ArrayBuffer, length: number, mode: HkdfMode): Promise<ArrayBuffer>;
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=hkdf.nitro.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hkdf.nitro.d.ts","sourceRoot":"","sources":["../../../src/specs/hkdf.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"hkdf.nitro.d.ts","sourceRoot":"","sources":["../../../src/specs/hkdf.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI/D,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,IAAK,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;IACxE,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,GACb,WAAW,CAAC;IAEf,SAAS,CACP,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,WAAW,CAAC,CAAC;CACzB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// HkdfMode.hpp
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#if __has_include(<NitroModules/NitroHash.hpp>)
|
|
11
|
+
#include <NitroModules/NitroHash.hpp>
|
|
12
|
+
#else
|
|
13
|
+
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
|
|
14
|
+
#endif
|
|
15
|
+
#if __has_include(<NitroModules/JSIConverter.hpp>)
|
|
16
|
+
#include <NitroModules/JSIConverter.hpp>
|
|
17
|
+
#else
|
|
18
|
+
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
|
|
19
|
+
#endif
|
|
20
|
+
#if __has_include(<NitroModules/NitroDefines.hpp>)
|
|
21
|
+
#include <NitroModules/NitroDefines.hpp>
|
|
22
|
+
#else
|
|
23
|
+
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
|
|
24
|
+
#endif
|
|
25
|
+
|
|
26
|
+
namespace margelo::nitro::crypto {
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* An enum which can be represented as a JavaScript union (HkdfMode).
|
|
30
|
+
*/
|
|
31
|
+
enum class HkdfMode {
|
|
32
|
+
FULL SWIFT_NAME(full) = 0,
|
|
33
|
+
EXTRACT SWIFT_NAME(extract) = 1,
|
|
34
|
+
EXPAND SWIFT_NAME(expand) = 2,
|
|
35
|
+
} CLOSED_ENUM;
|
|
36
|
+
|
|
37
|
+
} // namespace margelo::nitro::crypto
|
|
38
|
+
|
|
39
|
+
namespace margelo::nitro {
|
|
40
|
+
|
|
41
|
+
// C++ HkdfMode <> JS HkdfMode (union)
|
|
42
|
+
template <>
|
|
43
|
+
struct JSIConverter<margelo::nitro::crypto::HkdfMode> final {
|
|
44
|
+
static inline margelo::nitro::crypto::HkdfMode fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
|
|
45
|
+
std::string unionValue = JSIConverter<std::string>::fromJSI(runtime, arg);
|
|
46
|
+
switch (hashString(unionValue.c_str(), unionValue.size())) {
|
|
47
|
+
case hashString("full"): return margelo::nitro::crypto::HkdfMode::FULL;
|
|
48
|
+
case hashString("extract"): return margelo::nitro::crypto::HkdfMode::EXTRACT;
|
|
49
|
+
case hashString("expand"): return margelo::nitro::crypto::HkdfMode::EXPAND;
|
|
50
|
+
default: [[unlikely]]
|
|
51
|
+
throw std::invalid_argument("Cannot convert \"" + unionValue + "\" to enum HkdfMode - invalid value!");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
static inline jsi::Value toJSI(jsi::Runtime& runtime, margelo::nitro::crypto::HkdfMode arg) {
|
|
55
|
+
switch (arg) {
|
|
56
|
+
case margelo::nitro::crypto::HkdfMode::FULL: return JSIConverter<std::string>::toJSI(runtime, "full");
|
|
57
|
+
case margelo::nitro::crypto::HkdfMode::EXTRACT: return JSIConverter<std::string>::toJSI(runtime, "extract");
|
|
58
|
+
case margelo::nitro::crypto::HkdfMode::EXPAND: return JSIConverter<std::string>::toJSI(runtime, "expand");
|
|
59
|
+
default: [[unlikely]]
|
|
60
|
+
throw std::invalid_argument("Cannot convert HkdfMode to JS - invalid value: "
|
|
61
|
+
+ std::to_string(static_cast<int>(arg)) + "!");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
|
|
65
|
+
if (!value.isString()) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
std::string unionValue = JSIConverter<std::string>::fromJSI(runtime, value);
|
|
69
|
+
switch (hashString(unionValue.c_str(), unionValue.size())) {
|
|
70
|
+
case hashString("full"):
|
|
71
|
+
case hashString("extract"):
|
|
72
|
+
case hashString("expand"):
|
|
73
|
+
return true;
|
|
74
|
+
default:
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
} // namespace margelo::nitro
|
|
@@ -13,10 +13,12 @@
|
|
|
13
13
|
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
|
|
14
14
|
#endif
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
// Forward declaration of `HkdfMode` to properly resolve imports.
|
|
17
|
+
namespace margelo::nitro::crypto { enum class HkdfMode; }
|
|
17
18
|
|
|
18
19
|
#include <NitroModules/ArrayBuffer.hpp>
|
|
19
20
|
#include <string>
|
|
21
|
+
#include "HkdfMode.hpp"
|
|
20
22
|
#include <NitroModules/Promise.hpp>
|
|
21
23
|
|
|
22
24
|
namespace margelo::nitro::crypto {
|
|
@@ -50,8 +52,8 @@ namespace margelo::nitro::crypto {
|
|
|
50
52
|
|
|
51
53
|
public:
|
|
52
54
|
// Methods
|
|
53
|
-
virtual std::shared_ptr<ArrayBuffer> deriveKeySync(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& key, const std::shared_ptr<ArrayBuffer>& salt, const std::shared_ptr<ArrayBuffer>& info, double length) = 0;
|
|
54
|
-
virtual std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> deriveKey(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& key, const std::shared_ptr<ArrayBuffer>& salt, const std::shared_ptr<ArrayBuffer>& info, double length) = 0;
|
|
55
|
+
virtual std::shared_ptr<ArrayBuffer> deriveKeySync(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& key, const std::shared_ptr<ArrayBuffer>& salt, const std::shared_ptr<ArrayBuffer>& info, double length, HkdfMode mode) = 0;
|
|
56
|
+
virtual std::shared_ptr<Promise<std::shared_ptr<ArrayBuffer>>> deriveKey(const std::string& algorithm, const std::shared_ptr<ArrayBuffer>& key, const std::shared_ptr<ArrayBuffer>& salt, const std::shared_ptr<ArrayBuffer>& info, double length, HkdfMode mode) = 0;
|
|
55
57
|
|
|
56
58
|
protected:
|
|
57
59
|
// Hybrid Setup
|
package/package.json
CHANGED
package/src/hkdf.ts
CHANGED
|
@@ -62,6 +62,14 @@ const HKDF_HASH_BYTES: Readonly<Record<string, number>> = {
|
|
|
62
62
|
ripemd160: 20,
|
|
63
63
|
};
|
|
64
64
|
|
|
65
|
+
function hkdfHashLen(digest: string): number {
|
|
66
|
+
const hashLen = HKDF_HASH_BYTES[digest.toLowerCase()];
|
|
67
|
+
if (hashLen === undefined) {
|
|
68
|
+
throw new TypeError(`Unsupported HKDF digest: ${digest}`);
|
|
69
|
+
}
|
|
70
|
+
return hashLen;
|
|
71
|
+
}
|
|
72
|
+
|
|
65
73
|
function validateHkdfKeylen(digest: string, keylen: number): void {
|
|
66
74
|
if (
|
|
67
75
|
typeof keylen !== 'number' ||
|
|
@@ -111,6 +119,7 @@ export function hkdf(
|
|
|
111
119
|
sanitizedSalt,
|
|
112
120
|
sanitizedInfo,
|
|
113
121
|
keylen,
|
|
122
|
+
'full',
|
|
114
123
|
)
|
|
115
124
|
.then(
|
|
116
125
|
res => {
|
|
@@ -146,11 +155,143 @@ export function hkdfSync(
|
|
|
146
155
|
sanitizedSalt,
|
|
147
156
|
sanitizedInfo,
|
|
148
157
|
keylen,
|
|
158
|
+
'full',
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
return Buffer.from(result);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// RFC 5869 §2.2 HKDF-Extract (sync): PRK = HMAC(salt, IKM). Salt defaults to
|
|
165
|
+
// a string of HashLen zeros when omitted. Returns a PRK of HashLen bytes.
|
|
166
|
+
export function hkdfExtractSync(
|
|
167
|
+
digest: string,
|
|
168
|
+
ikm: KeyMaterial,
|
|
169
|
+
salt: Salt = new Uint8Array(0),
|
|
170
|
+
): Buffer {
|
|
171
|
+
const normalizedDigest = normalizeHashName(digest);
|
|
172
|
+
const hashLen = hkdfHashLen(normalizedDigest);
|
|
173
|
+
const sanitizedIkm = sanitizeInput(ikm, 'IKM');
|
|
174
|
+
const sanitizedSalt = sanitizeInput(salt, 'Salt');
|
|
175
|
+
|
|
176
|
+
const result = getNative().deriveKeySync(
|
|
177
|
+
normalizedDigest,
|
|
178
|
+
sanitizedIkm,
|
|
179
|
+
sanitizedSalt,
|
|
180
|
+
new ArrayBuffer(0),
|
|
181
|
+
hashLen,
|
|
182
|
+
'extract',
|
|
149
183
|
);
|
|
150
184
|
|
|
151
185
|
return Buffer.from(result);
|
|
152
186
|
}
|
|
153
187
|
|
|
188
|
+
// Async HKDF-Extract, mirroring `hkdf`. Unlike the sync form, `salt` is
|
|
189
|
+
// required here because the callback occupies the trailing argument.
|
|
190
|
+
export function hkdfExtract(
|
|
191
|
+
digest: string,
|
|
192
|
+
ikm: KeyMaterial,
|
|
193
|
+
salt: Salt,
|
|
194
|
+
callback: HkdfCallback,
|
|
195
|
+
): void {
|
|
196
|
+
validateCallback(callback);
|
|
197
|
+
|
|
198
|
+
try {
|
|
199
|
+
const normalizedDigest = normalizeHashName(digest);
|
|
200
|
+
const hashLen = hkdfHashLen(normalizedDigest);
|
|
201
|
+
const sanitizedIkm = sanitizeInput(ikm, 'IKM');
|
|
202
|
+
const sanitizedSalt = sanitizeInput(salt, 'Salt');
|
|
203
|
+
|
|
204
|
+
getNative()
|
|
205
|
+
.deriveKey(
|
|
206
|
+
normalizedDigest,
|
|
207
|
+
sanitizedIkm,
|
|
208
|
+
sanitizedSalt,
|
|
209
|
+
new ArrayBuffer(0),
|
|
210
|
+
hashLen,
|
|
211
|
+
'extract',
|
|
212
|
+
)
|
|
213
|
+
.then(
|
|
214
|
+
res => callback(null, Buffer.from(res)),
|
|
215
|
+
err => callback(err),
|
|
216
|
+
);
|
|
217
|
+
} catch (err) {
|
|
218
|
+
callback(err as Error);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// RFC 5869 §2.3 HKDF-Expand (sync): OKM = expand(PRK, info, L). `prk` must be
|
|
223
|
+
// at least HashLen bytes (a pseudorandom key, e.g. from hkdfExtract).
|
|
224
|
+
export function hkdfExpandSync(
|
|
225
|
+
digest: string,
|
|
226
|
+
prk: KeyMaterial,
|
|
227
|
+
info: Info,
|
|
228
|
+
keylen: number,
|
|
229
|
+
): Buffer {
|
|
230
|
+
const normalizedDigest = normalizeHashName(digest);
|
|
231
|
+
const hashLen = hkdfHashLen(normalizedDigest);
|
|
232
|
+
const sanitizedPrk = sanitizeInput(prk, 'PRK');
|
|
233
|
+
if (sanitizedPrk.byteLength < hashLen) {
|
|
234
|
+
throw new RangeError(
|
|
235
|
+
`HKDF-Expand PRK must be at least HashLen (${hashLen}) bytes for ${digest}`,
|
|
236
|
+
);
|
|
237
|
+
}
|
|
238
|
+
const sanitizedInfo = sanitizeInput(info, 'Info');
|
|
239
|
+
|
|
240
|
+
validateHkdfKeylen(normalizedDigest, keylen);
|
|
241
|
+
|
|
242
|
+
const result = getNative().deriveKeySync(
|
|
243
|
+
normalizedDigest,
|
|
244
|
+
sanitizedPrk,
|
|
245
|
+
new ArrayBuffer(0),
|
|
246
|
+
sanitizedInfo,
|
|
247
|
+
keylen,
|
|
248
|
+
'expand',
|
|
249
|
+
);
|
|
250
|
+
|
|
251
|
+
return Buffer.from(result);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Async HKDF-Expand, mirroring `hkdf`.
|
|
255
|
+
export function hkdfExpand(
|
|
256
|
+
digest: string,
|
|
257
|
+
prk: KeyMaterial,
|
|
258
|
+
info: Info,
|
|
259
|
+
keylen: number,
|
|
260
|
+
callback: HkdfCallback,
|
|
261
|
+
): void {
|
|
262
|
+
validateCallback(callback);
|
|
263
|
+
|
|
264
|
+
try {
|
|
265
|
+
const normalizedDigest = normalizeHashName(digest);
|
|
266
|
+
const hashLen = hkdfHashLen(normalizedDigest);
|
|
267
|
+
const sanitizedPrk = sanitizeInput(prk, 'PRK');
|
|
268
|
+
if (sanitizedPrk.byteLength < hashLen) {
|
|
269
|
+
throw new RangeError(
|
|
270
|
+
`HKDF-Expand PRK must be at least HashLen (${hashLen}) bytes for ${digest}`,
|
|
271
|
+
);
|
|
272
|
+
}
|
|
273
|
+
const sanitizedInfo = sanitizeInput(info, 'Info');
|
|
274
|
+
|
|
275
|
+
validateHkdfKeylen(normalizedDigest, keylen);
|
|
276
|
+
|
|
277
|
+
getNative()
|
|
278
|
+
.deriveKey(
|
|
279
|
+
normalizedDigest,
|
|
280
|
+
sanitizedPrk,
|
|
281
|
+
new ArrayBuffer(0),
|
|
282
|
+
sanitizedInfo,
|
|
283
|
+
keylen,
|
|
284
|
+
'expand',
|
|
285
|
+
)
|
|
286
|
+
.then(
|
|
287
|
+
res => callback(null, Buffer.from(res)),
|
|
288
|
+
err => callback(err),
|
|
289
|
+
);
|
|
290
|
+
} catch (err) {
|
|
291
|
+
callback(err as Error);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
154
295
|
export function hkdfDeriveBits(
|
|
155
296
|
algorithm: HkdfAlgorithm,
|
|
156
297
|
baseKey: CryptoKey,
|
|
@@ -179,6 +320,7 @@ export function hkdfDeriveBits(
|
|
|
179
320
|
binaryLikeToArrayBuffer(salt),
|
|
180
321
|
binaryLikeToArrayBuffer(info),
|
|
181
322
|
keylen,
|
|
323
|
+
'full',
|
|
182
324
|
);
|
|
183
325
|
|
|
184
326
|
return result;
|
package/src/specs/hkdf.nitro.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import type { HybridObject } from 'react-native-nitro-modules';
|
|
2
2
|
|
|
3
|
+
// RFC 5869 stage: 'full' (extract+expand), 'extract' (PRK only), or
|
|
4
|
+
// 'expand' (from an existing PRK).
|
|
5
|
+
export type HkdfMode = 'full' | 'extract' | 'expand';
|
|
6
|
+
|
|
3
7
|
export interface Hkdf extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
|
|
4
8
|
deriveKeySync(
|
|
5
9
|
algorithm: string,
|
|
@@ -7,6 +11,7 @@ export interface Hkdf extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
|
|
|
7
11
|
salt: ArrayBuffer,
|
|
8
12
|
info: ArrayBuffer,
|
|
9
13
|
length: number,
|
|
14
|
+
mode: HkdfMode,
|
|
10
15
|
): ArrayBuffer;
|
|
11
16
|
|
|
12
17
|
deriveKey(
|
|
@@ -15,5 +20,6 @@ export interface Hkdf extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
|
|
|
15
20
|
salt: ArrayBuffer,
|
|
16
21
|
info: ArrayBuffer,
|
|
17
22
|
length: number,
|
|
23
|
+
mode: HkdfMode,
|
|
18
24
|
): Promise<ArrayBuffer>;
|
|
19
25
|
}
|