edhoc 1.3.2 → 1.4.0
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/dist/crypto.d.ts +2 -2
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +2 -2
- package/dist/edhoc.d.ts +7 -0
- package/dist/edhoc.d.ts.map +1 -1
- package/include/Binding.h +11 -0
- package/include/EdhocCredentialManager.h +17 -0
- package/package.json +1 -1
- package/prebuilds/android-arm/edhoc.armv7.node +0 -0
- package/prebuilds/android-arm64/edhoc.armv8.node +0 -0
- package/prebuilds/darwin-arm64/edhoc.node +0 -0
- package/prebuilds/darwin-x64/edhoc.node +0 -0
- package/prebuilds/linux-arm/edhoc.armv6.node +0 -0
- package/prebuilds/linux-arm/edhoc.armv7.node +0 -0
- package/prebuilds/linux-arm64/edhoc.armv8.node +0 -0
- package/prebuilds/linux-x64/edhoc.glibc.node +0 -0
- package/prebuilds/linux-x64/edhoc.musl.node +0 -0
- package/prebuilds/win32-ia32/edhoc.node +0 -0
- package/prebuilds/win32-x64/edhoc.node +0 -0
- package/src/Binding.cpp +12 -0
- package/src/EdhocCredentialManager.cpp +114 -3
- package/test/basic.test.ts +9 -0
package/dist/crypto.d.ts
CHANGED
|
@@ -15,8 +15,8 @@ export declare class DefaultEdhocCryptoManager implements EdhocCryptoManager {
|
|
|
15
15
|
verify(edhoc: EDHOC, keyID: Buffer, input: Buffer, signature: Buffer): Promise<boolean>;
|
|
16
16
|
extract(edhoc: EDHOC, keyID: Buffer, salt: Buffer, _keySize: number): Buffer;
|
|
17
17
|
expand(edhoc: EDHOC, keyID: Buffer, info: Buffer, keySize: number): Buffer;
|
|
18
|
-
encrypt(edhoc: EDHOC, keyID: Buffer, nonce: Buffer, aad: Buffer, plaintext: Buffer, _size: number): Buffer
|
|
19
|
-
decrypt(edhoc: EDHOC, keyID: Buffer, nonce: Buffer, aad: Buffer, ciphertext: Buffer, _size: number): Buffer
|
|
18
|
+
encrypt(edhoc: EDHOC, keyID: Buffer, nonce: Buffer, aad: Buffer, plaintext: Buffer, _size: number): Promise<Buffer>;
|
|
19
|
+
decrypt(edhoc: EDHOC, keyID: Buffer, nonce: Buffer, aad: Buffer, ciphertext: Buffer, _size: number): Promise<Buffer>;
|
|
20
20
|
hash(_edhoc: EDHOC, data: Buffer, _hashSize: number): Promise<Buffer>;
|
|
21
21
|
getKey(keyID: Buffer): Buffer;
|
|
22
22
|
private formatToBeSigned;
|
package/dist/crypto.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../lib/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAc,MAAM,SAAS,CAAC;AAoB9E,qBAAa,yBAA0B,YAAW,kBAAkB;IAEhE,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,aAAa,CAAgB;;IAM9B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAKlC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM;IAsBhE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;IAStC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;;;;IAcxF,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;IAQpF,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAiBjE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa7F,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAKnE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../lib/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAc,MAAM,SAAS,CAAC;AAoB9E,qBAAa,yBAA0B,YAAW,kBAAkB;IAEhE,OAAO,CAAC,IAAI,CAAiB;IAC7B,OAAO,CAAC,aAAa,CAAgB;;IAM9B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAKlC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM;IAsBhE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;IAStC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;;;;IAcxF,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM;IAQpF,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;IAiBjE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa7F,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAKnE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAM3D,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBnH,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBpH,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAIlD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQpC,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;CAiBvB"}
|
package/dist/crypto.js
CHANGED
|
@@ -98,7 +98,7 @@ class DefaultEdhocCryptoManager {
|
|
|
98
98
|
const expanded = Buffer.from((0, hkdf_1.expand)(sha256_1.sha256, new Uint8Array(key), new Uint8Array(info), keySize));
|
|
99
99
|
return expanded;
|
|
100
100
|
}
|
|
101
|
-
encrypt(edhoc, keyID, nonce, aad, plaintext, _size) {
|
|
101
|
+
async encrypt(edhoc, keyID, nonce, aad, plaintext, _size) {
|
|
102
102
|
const key = this.getKey(keyID);
|
|
103
103
|
const algorithm = this.getAlgorithm(edhoc.selectedSuite);
|
|
104
104
|
const options = {
|
|
@@ -114,7 +114,7 @@ class DefaultEdhocCryptoManager {
|
|
|
114
114
|
]);
|
|
115
115
|
return encrypted;
|
|
116
116
|
}
|
|
117
|
-
decrypt(edhoc, keyID, nonce, aad, ciphertext, _size) {
|
|
117
|
+
async decrypt(edhoc, keyID, nonce, aad, ciphertext, _size) {
|
|
118
118
|
const key = this.getKey(keyID);
|
|
119
119
|
const tagLength = this.getTagLength(edhoc.selectedSuite);
|
|
120
120
|
const algorithm = this.getAlgorithm(edhoc.selectedSuite);
|
package/dist/edhoc.d.ts
CHANGED
|
@@ -360,6 +360,13 @@ export declare class EDHOC {
|
|
|
360
360
|
* @return A promise that resolves to the exported key.
|
|
361
361
|
*/
|
|
362
362
|
exportKey(exporterLabel: number, length: number): Promise<Buffer> | never;
|
|
363
|
+
/**
|
|
364
|
+
* Exports the peer credentials used during the EDHOC exchange.
|
|
365
|
+
* This returns the (post-verify) credentials object returned by your credential manager's `verify(...)`.
|
|
366
|
+
*
|
|
367
|
+
* Returns `null` if the peer credentials haven't been verified yet, or after `reset()`.
|
|
368
|
+
*/
|
|
369
|
+
exportUsedPeerCredentials(): EdhocCredentials | null;
|
|
363
370
|
/**
|
|
364
371
|
* Key update for the new OSCORE security session
|
|
365
372
|
* Read Appendix H of RFC 9528 - https://www.rfc-editor.org/rfc/rfc9528.html#appendix-H
|
package/dist/edhoc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edhoc.d.ts","sourceRoot":"","sources":["../lib/edhoc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"edhoc.d.ts","sourceRoot":"","sources":["../lib/edhoc.ts"],"names":[],"mappings":"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"}
|
package/include/Binding.h
CHANGED
|
@@ -282,6 +282,17 @@ class Edhoc : public Napi::ObjectWrap<Edhoc> {
|
|
|
282
282
|
*/
|
|
283
283
|
Napi::Value ExportKey(const Napi::CallbackInfo& info);
|
|
284
284
|
|
|
285
|
+
/**
|
|
286
|
+
* @brief Exports the peer credentials used during the EDHOC exchange.
|
|
287
|
+
*
|
|
288
|
+
* Returns the last credentials object returned from the user-provided
|
|
289
|
+
* credential manager's verify() function. This is a synchronous call.
|
|
290
|
+
*
|
|
291
|
+
* @param info The Napi::CallbackInfo representing the callback information.
|
|
292
|
+
* @return Napi::Value The peer credentials object or Null if not available.
|
|
293
|
+
*/
|
|
294
|
+
Napi::Value ExportUsedPeerCredentials(const Napi::CallbackInfo& info);
|
|
295
|
+
|
|
285
296
|
/**
|
|
286
297
|
* @brief Performs a key update.
|
|
287
298
|
*
|
|
@@ -34,6 +34,22 @@ class EdhocCredentialManager {
|
|
|
34
34
|
*/
|
|
35
35
|
~EdhocCredentialManager();
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* @brief Clears any cached credential objects from the previous EDHOC run.
|
|
39
|
+
*
|
|
40
|
+
* This is intended to be called from EDHOC::reset() to avoid leaking
|
|
41
|
+
* credential references across sessions and to ensure exported values
|
|
42
|
+
* reflect only the current session.
|
|
43
|
+
*/
|
|
44
|
+
void ClearCachedCredentials();
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @brief Returns the last peer credentials object returned from JS verify().
|
|
48
|
+
*
|
|
49
|
+
* @return Napi::Value The cached credentials object, or null if not available.
|
|
50
|
+
*/
|
|
51
|
+
Napi::Value GetCachedPeerCredentials(Napi::Env env);
|
|
52
|
+
|
|
37
53
|
/**
|
|
38
54
|
* @brief Static function to fetch the credentials.
|
|
39
55
|
* @param user_context The user context.
|
|
@@ -84,6 +100,7 @@ class EdhocCredentialManager {
|
|
|
84
100
|
std::vector<Napi::Reference<Napi::Object>> credentialReferences_; ///< References to the JS objects
|
|
85
101
|
Napi::ObjectReference credentialManagerRef_; ///< Reference to the JS object
|
|
86
102
|
Napi::ObjectReference edhocRef_;
|
|
103
|
+
Napi::ObjectReference cachedPeerCredentialsRef_; ///< Cached peer credential (post-verify)
|
|
87
104
|
};
|
|
88
105
|
|
|
89
106
|
#endif // EDHOC_CREDENTIAL_MANAGER_H
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "edhoc",
|
|
3
3
|
"description": "A Node.js implementation of EDHOC (Ephemeral Diffie-Hellman Over COSE) protocol for lightweight authenticated key exchange in IoT and other constrained environments.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.4.0",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"author": "Marek Serafin <marek@serafin.email>",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/src/Binding.cpp
CHANGED
|
@@ -53,6 +53,11 @@ void Edhoc::Reset(const Napi::CallbackInfo& info) {
|
|
|
53
53
|
Napi::Env env = info.Env();
|
|
54
54
|
Napi::HandleScope scope(env);
|
|
55
55
|
|
|
56
|
+
// Clear cached session state from previous run
|
|
57
|
+
if (this->credentialManager_ != nullptr) {
|
|
58
|
+
this->credentialManager_->ClearCachedCredentials();
|
|
59
|
+
}
|
|
60
|
+
|
|
56
61
|
bool isInitialized = edhocContext_ != nullptr;
|
|
57
62
|
|
|
58
63
|
// Get the Connection ID, Methods, and Suites
|
|
@@ -373,6 +378,12 @@ Napi::Value Edhoc::ExportKey(const Napi::CallbackInfo& info) {
|
|
|
373
378
|
return this->runningContext_->GetPromise();
|
|
374
379
|
}
|
|
375
380
|
|
|
381
|
+
Napi::Value Edhoc::ExportUsedPeerCredentials(const Napi::CallbackInfo& info) {
|
|
382
|
+
Napi::Env env = info.Env();
|
|
383
|
+
Napi::HandleScope scope(env);
|
|
384
|
+
return this->credentialManager_->GetCachedPeerCredentials(env);
|
|
385
|
+
}
|
|
386
|
+
|
|
376
387
|
Napi::Value Edhoc::KeyUpdate(const Napi::CallbackInfo& info) {
|
|
377
388
|
Napi::Env env = info.Env();
|
|
378
389
|
Napi::HandleScope scope(env);
|
|
@@ -420,6 +431,7 @@ Napi::Object Edhoc::Init(Napi::Env env, Napi::Object exports) {
|
|
|
420
431
|
InstanceMethod("processMessage4", &Edhoc::ProcessMessage4),
|
|
421
432
|
InstanceMethod("exportOSCORE", &Edhoc::ExportOSCORE),
|
|
422
433
|
InstanceMethod("exportKey", &Edhoc::ExportKey),
|
|
434
|
+
InstanceMethod("exportUsedPeerCredentials", &Edhoc::ExportUsedPeerCredentials),
|
|
423
435
|
InstanceMethod("keyUpdate", &Edhoc::KeyUpdate),
|
|
424
436
|
});
|
|
425
437
|
|
|
@@ -27,6 +27,89 @@ static constexpr const char* kInvalidInputDataErrorX509Chain = "Invalid input da
|
|
|
27
27
|
static constexpr const char* kInvalidInputDataErrorX509Hash = "Invalid input data for X.509 hash";
|
|
28
28
|
static constexpr const char* kErrorObjectExpected = "Object expected";
|
|
29
29
|
|
|
30
|
+
static Napi::Value copy_if_buffer(Napi::Env env, const Napi::Value& value) {
|
|
31
|
+
if (value.IsBuffer()) {
|
|
32
|
+
auto buf = value.As<Napi::Buffer<uint8_t>>();
|
|
33
|
+
return Napi::Buffer<uint8_t>::Copy(env, buf.Data(), buf.Length());
|
|
34
|
+
}
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
static Napi::Object clone_credentials_object(Napi::Env env, const Napi::Object& credsObj) {
|
|
39
|
+
if (!credsObj.Has(kFormat)) {
|
|
40
|
+
throw std::runtime_error(kInvalidInputCredentialTypeError);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
Napi::Object out = Napi::Object::New(env);
|
|
44
|
+
out.Set(kFormat, credsObj.Get(kFormat));
|
|
45
|
+
|
|
46
|
+
// Optional fields that can appear on credentials object
|
|
47
|
+
if (credsObj.Has(kPrivateKeyId) && !credsObj.Get(kPrivateKeyId).IsNull() && !credsObj.Get(kPrivateKeyId).IsUndefined()) {
|
|
48
|
+
out.Set(kPrivateKeyId, copy_if_buffer(env, credsObj.Get(kPrivateKeyId)));
|
|
49
|
+
}
|
|
50
|
+
if (credsObj.Has(kPublicKey) && !credsObj.Get(kPublicKey).IsNull() && !credsObj.Get(kPublicKey).IsUndefined()) {
|
|
51
|
+
out.Set(kPublicKey, copy_if_buffer(env, credsObj.Get(kPublicKey)));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const int label = credsObj.Get(kFormat).As<Napi::Number>().Int32Value();
|
|
55
|
+
switch (label) {
|
|
56
|
+
case EDHOC_COSE_HEADER_KID: {
|
|
57
|
+
Napi::Object kidObj = credsObj.Get(kKid).As<Napi::Object>();
|
|
58
|
+
Napi::Object newKidObj = Napi::Object::New(env);
|
|
59
|
+
|
|
60
|
+
if (kidObj.Has(kIsCBOR)) {
|
|
61
|
+
newKidObj.Set(kIsCBOR, kidObj.Get(kIsCBOR));
|
|
62
|
+
}
|
|
63
|
+
if (kidObj.Has(kKid)) {
|
|
64
|
+
newKidObj.Set(kKid, copy_if_buffer(env, kidObj.Get(kKid)));
|
|
65
|
+
}
|
|
66
|
+
if (kidObj.Has(kCredentials)) {
|
|
67
|
+
newKidObj.Set(kCredentials, copy_if_buffer(env, kidObj.Get(kCredentials)));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
out.Set(kKid, newKidObj);
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case EDHOC_COSE_HEADER_X509_CHAIN: {
|
|
74
|
+
Napi::Object x5chainObj = credsObj.Get(kX5chain).As<Napi::Object>();
|
|
75
|
+
Napi::Object newX5chainObj = Napi::Object::New(env);
|
|
76
|
+
|
|
77
|
+
if (x5chainObj.Has(kCertificates)) {
|
|
78
|
+
Napi::Array certArray = x5chainObj.Get(kCertificates).As<Napi::Array>();
|
|
79
|
+
Napi::Array newCertArray = Napi::Array::New(env, certArray.Length());
|
|
80
|
+
for (uint32_t i = 0; i < certArray.Length(); ++i) {
|
|
81
|
+
newCertArray.Set(i, copy_if_buffer(env, certArray.Get(i)));
|
|
82
|
+
}
|
|
83
|
+
newX5chainObj.Set(kCertificates, newCertArray);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
out.Set(kX5chain, newX5chainObj);
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
case EDHOC_COSE_HEADER_X509_HASH: {
|
|
90
|
+
Napi::Object x5tObj = credsObj.Get(kX5t).As<Napi::Object>();
|
|
91
|
+
Napi::Object newX5tObj = Napi::Object::New(env);
|
|
92
|
+
|
|
93
|
+
if (x5tObj.Has(kCertificate) && !x5tObj.Get(kCertificate).IsUndefined() && !x5tObj.Get(kCertificate).IsNull()) {
|
|
94
|
+
newX5tObj.Set(kCertificate, copy_if_buffer(env, x5tObj.Get(kCertificate)));
|
|
95
|
+
}
|
|
96
|
+
if (x5tObj.Has(kHash)) {
|
|
97
|
+
newX5tObj.Set(kHash, copy_if_buffer(env, x5tObj.Get(kHash)));
|
|
98
|
+
}
|
|
99
|
+
if (x5tObj.Has(kHashAlgorithm)) {
|
|
100
|
+
newX5tObj.Set(kHashAlgorithm, x5tObj.Get(kHashAlgorithm));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
out.Set(kX5t, newX5tObj);
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
default:
|
|
107
|
+
throw std::runtime_error(kUnsupportedCredentialTypeError);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return out;
|
|
111
|
+
}
|
|
112
|
+
|
|
30
113
|
/*
|
|
31
114
|
* Convert a JavaScript object to an edhoc_auth_cred_key_id
|
|
32
115
|
*/
|
|
@@ -172,12 +255,28 @@ EdhocCredentialManager::EdhocCredentialManager(Napi::Object& jsCredentialManager
|
|
|
172
255
|
EdhocCredentialManager::~EdhocCredentialManager() {
|
|
173
256
|
credentialManagerRef_.Reset();
|
|
174
257
|
edhocRef_.Reset();
|
|
258
|
+
cachedPeerCredentialsRef_.Reset();
|
|
259
|
+
for (auto& ref : credentialReferences_) {
|
|
260
|
+
ref.Reset();
|
|
261
|
+
}
|
|
262
|
+
credentialReferences_.clear();
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
void EdhocCredentialManager::ClearCachedCredentials() {
|
|
266
|
+
cachedPeerCredentialsRef_.Reset();
|
|
175
267
|
for (auto& ref : credentialReferences_) {
|
|
176
268
|
ref.Reset();
|
|
177
269
|
}
|
|
178
270
|
credentialReferences_.clear();
|
|
179
271
|
}
|
|
180
272
|
|
|
273
|
+
Napi::Value EdhocCredentialManager::GetCachedPeerCredentials(Napi::Env env) {
|
|
274
|
+
if (cachedPeerCredentialsRef_.IsEmpty()) {
|
|
275
|
+
return env.Null();
|
|
276
|
+
}
|
|
277
|
+
return cachedPeerCredentialsRef_.Value();
|
|
278
|
+
}
|
|
279
|
+
|
|
181
280
|
/*
|
|
182
281
|
* Static method to fetch credentials
|
|
183
282
|
*/
|
|
@@ -256,13 +355,21 @@ int EdhocCredentialManager::callVerifyCredentials(RunningContext* runningContext
|
|
|
256
355
|
|
|
257
356
|
auto successHandler = [this, &credentials, &public_key_reference, &public_key_length](Napi::Env env, Napi::Value result) {
|
|
258
357
|
Napi::HandleScope scope(env);
|
|
259
|
-
|
|
260
|
-
|
|
358
|
+
// Clear cached peer credentials for this attempt. If verification fails below,
|
|
359
|
+
// exportUsedPeerCredentials() should not return stale/invalid data.
|
|
360
|
+
cachedPeerCredentialsRef_.Reset();
|
|
361
|
+
|
|
362
|
+
if (result.IsObject() == false) {
|
|
363
|
+
throw std::runtime_error(kInvalidInputCredentialTypeError);
|
|
364
|
+
}
|
|
261
365
|
|
|
262
|
-
|
|
366
|
+
Napi::Object credsObj = result.As<Napi::Object>();
|
|
367
|
+
if (credsObj.Has(kFormat) == false) {
|
|
263
368
|
throw std::runtime_error(kInvalidInputCredentialTypeError);
|
|
264
369
|
}
|
|
265
370
|
|
|
371
|
+
credentialReferences_.push_back(Napi::Persistent(credsObj));
|
|
372
|
+
|
|
266
373
|
int label = credsObj.Get(kFormat).As<Napi::Number>().Int32Value();
|
|
267
374
|
switch (label) {
|
|
268
375
|
case EDHOC_COSE_HEADER_KID:
|
|
@@ -284,6 +391,10 @@ int EdhocCredentialManager::callVerifyCredentials(RunningContext* runningContext
|
|
|
284
391
|
*public_key_length = publicKeyBuffer.Length();
|
|
285
392
|
}
|
|
286
393
|
|
|
394
|
+
// Cache a deep copy of the validated peer credentials object for later export.
|
|
395
|
+
// (Deep copy prevents user-side mutations from affecting the cached value.)
|
|
396
|
+
cachedPeerCredentialsRef_ = Napi::Persistent(clone_credentials_object(env, credsObj));
|
|
397
|
+
|
|
287
398
|
return EDHOC_SUCCESS;
|
|
288
399
|
};
|
|
289
400
|
|
package/test/basic.test.ts
CHANGED
|
@@ -85,6 +85,15 @@ describe('EDHOC Handshake', () => {
|
|
|
85
85
|
const initiatorKey = await initiator.exportKey(40001, 32);
|
|
86
86
|
const responderKey = await responder.exportKey(40001, 32);
|
|
87
87
|
expect(initiatorKey).toEqual(responderKey);
|
|
88
|
+
|
|
89
|
+
// Peer credentials should be available after peer verification
|
|
90
|
+
const initiatorPeerCreds = initiator.exportUsedPeerCredentials();
|
|
91
|
+
expect(initiatorPeerCreds).not.toBeNull();
|
|
92
|
+
expect((initiatorPeerCreds as { publicKey: Buffer }).publicKey).toBeInstanceOf(Buffer);
|
|
93
|
+
|
|
94
|
+
// reset() should clear cached peer credentials
|
|
95
|
+
initiator.reset();
|
|
96
|
+
expect(initiator.exportUsedPeerCredentials()).toBeNull();
|
|
88
97
|
});
|
|
89
98
|
|
|
90
99
|
test('should fail to generate message 1 twice', async () => {
|