Skip to content

Commit 46762a2

Browse files
authored
Merge branch 'gchq:master' into checksum/xor
2 parents dda5814 + da922a4 commit 46762a2

2 files changed

Lines changed: 97 additions & 19 deletions

File tree

src/core/operations/ECDSAVerify.mjs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import OperationError from "../errors/OperationError.mjs";
99
import { fromBase64 } from "../lib/Base64.mjs";
1010
import { toHexFast } from "../lib/Hex.mjs";
1111
import r from "jsrsasign";
12+
import Utils from "../Utils.mjs";
1213

1314
/**
1415
* ECDSA Verify operation
@@ -59,6 +60,11 @@ class ECDSAVerify extends Operation {
5960
name: "Message",
6061
type: "text",
6162
value: ""
63+
},
64+
{
65+
name: "Message format",
66+
type: "option",
67+
value: ["Raw", "Hex", "Base64"]
6268
}
6369
];
6470
}
@@ -70,7 +76,7 @@ class ECDSAVerify extends Operation {
7076
*/
7177
run(input, args) {
7278
let inputFormat = args[0];
73-
const [, mdAlgo, keyPem, msg] = args;
79+
const [, mdAlgo, keyPem, msg, msgFormat] = args;
7480

7581
if (keyPem.replace("-----BEGIN PUBLIC KEY-----", "").length === 0) {
7682
throw new OperationError("Please enter a public key.");
@@ -145,7 +151,8 @@ class ECDSAVerify extends Operation {
145151
throw new OperationError("Provided key is not a public key.");
146152
}
147153
sig.init(key);
148-
sig.updateString(msg);
154+
const messageStr = Utils.convertToByteString(msg, msgFormat);
155+
sig.updateString(messageStr);
149156
const result = sig.verify(signatureASN1Hex);
150157
return result ? "Verified OK" : "Verification Failure";
151158
}

tests/operations/tests/ECDSA.mjs

Lines changed: 88 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
* @license Apache-2.0
77
*/
88
import TestRegister from "../../lib/TestRegister.mjs";
9-
import { ASCII_TEXT } from "../../samples/Ciphers.mjs";
9+
import {ALL_BYTES, ASCII_TEXT, UTF8_TEXT} from "../../samples/Ciphers.mjs";
10+
11+
const SOME_HEX_BYTES = "cdb23f958e018418621d9e489b7bba0f0c481f604eba2eb1ea35e38f99490cc0";
12+
const SOME_BASE64_BYTES = "zbI/lY4BhBhiHZ5Im3u6DwxIH2BOui6x6jXjj5lJDMA=";
1013

1114
const P256 = {
1215
// openssl ecparam -name prime256v1 -genkey -noout -out p256.priv.key
@@ -104,7 +107,7 @@ TestRegister.addTests([
104107
},
105108
{
106109
"op": "ECDSA Verify",
107-
"args": ["ASN.1 HEX", "MD5", P256.publicKey, ASCII_TEXT]
110+
"args": ["ASN.1 HEX", "MD5", P256.publicKey, ASCII_TEXT, "Raw"]
108111
}
109112
]
110113
},
@@ -119,7 +122,7 @@ TestRegister.addTests([
119122
},
120123
{
121124
"op": "ECDSA Verify",
122-
"args": ["ASN.1 HEX", "SHA-1", P256.publicKey, ASCII_TEXT]
125+
"args": ["ASN.1 HEX", "SHA-1", P256.publicKey, ASCII_TEXT, "Raw"]
123126
}
124127
]
125128
},
@@ -134,7 +137,7 @@ TestRegister.addTests([
134137
},
135138
{
136139
"op": "ECDSA Verify",
137-
"args": ["ASN.1 HEX", "SHA-256", P256.publicKey, ASCII_TEXT]
140+
"args": ["ASN.1 HEX", "SHA-256", P256.publicKey, ASCII_TEXT, "Raw"]
138141
}
139142
]
140143
},
@@ -149,7 +152,7 @@ TestRegister.addTests([
149152
},
150153
{
151154
"op": "ECDSA Verify",
152-
"args": ["ASN.1 HEX", "SHA-384", P256.publicKey, ASCII_TEXT]
155+
"args": ["ASN.1 HEX", "SHA-384", P256.publicKey, ASCII_TEXT, "Raw"]
153156
}
154157
]
155158
},
@@ -164,7 +167,7 @@ TestRegister.addTests([
164167
},
165168
{
166169
"op": "ECDSA Verify",
167-
"args": ["ASN.1 HEX", "SHA-512", P256.publicKey, ASCII_TEXT]
170+
"args": ["ASN.1 HEX", "SHA-512", P256.publicKey, ASCII_TEXT, "Raw"]
168171
}
169172
]
170173
},
@@ -179,7 +182,7 @@ TestRegister.addTests([
179182
},
180183
{
181184
"op": "ECDSA Verify",
182-
"args": ["ASN.1 HEX", "SHA-256", P256.publicKey, ASCII_TEXT]
185+
"args": ["ASN.1 HEX", "SHA-256", P256.publicKey, ASCII_TEXT, "Raw"]
183186
}
184187
]
185188
},
@@ -194,7 +197,7 @@ TestRegister.addTests([
194197
},
195198
{
196199
"op": "ECDSA Verify",
197-
"args": ["ASN.1 HEX", "SHA-384", P384.publicKey, ASCII_TEXT]
200+
"args": ["ASN.1 HEX", "SHA-384", P384.publicKey, ASCII_TEXT, "Raw"]
198201
}
199202
]
200203
},
@@ -209,7 +212,7 @@ TestRegister.addTests([
209212
},
210213
{
211214
"op": "ECDSA Verify",
212-
"args": ["ASN.1 HEX", "SHA-512", P521.publicKey, ASCII_TEXT]
215+
"args": ["ASN.1 HEX", "SHA-512", P521.publicKey, ASCII_TEXT, "Raw"]
213216
}
214217
]
215218
},
@@ -246,7 +249,7 @@ TestRegister.addTests([
246249
recipeConfig: [
247250
{
248251
"op": "ECDSA Verify",
249-
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT]
252+
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT, "Raw"]
250253
}
251254
]
252255
},
@@ -257,7 +260,7 @@ TestRegister.addTests([
257260
recipeConfig: [
258261
{
259262
"op": "ECDSA Verify",
260-
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT]
263+
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT, "Raw"]
261264
}
262265
]
263266
},
@@ -268,7 +271,7 @@ TestRegister.addTests([
268271
recipeConfig: [
269272
{
270273
"op": "ECDSA Verify",
271-
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT]
274+
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT, "Raw"]
272275
}
273276
]
274277
},
@@ -279,7 +282,7 @@ TestRegister.addTests([
279282
recipeConfig: [
280283
{
281284
"op": "ECDSA Verify",
282-
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT]
285+
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT, "Raw"]
283286
}
284287
]
285288
},
@@ -290,7 +293,7 @@ TestRegister.addTests([
290293
recipeConfig: [
291294
{
292295
"op": "ECDSA Verify",
293-
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT]
296+
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT, "Raw"]
294297
}
295298
]
296299
},
@@ -301,7 +304,7 @@ TestRegister.addTests([
301304
recipeConfig: [
302305
{
303306
"op": "ECDSA Verify",
304-
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT]
307+
"args": ["Auto", "SHA-256", P256.publicKey, ASCII_TEXT, "Raw"]
305308
}
306309
]
307310
},
@@ -312,7 +315,7 @@ TestRegister.addTests([
312315
recipeConfig: [
313316
{
314317
"op": "ECDSA Verify",
315-
"args": ["ASN.1 HEX", "SHA-256", P256.privateKeyPkcs1, ASCII_TEXT]
318+
"args": ["ASN.1 HEX", "SHA-256", P256.privateKeyPkcs1, ASCII_TEXT, "Raw"]
316319
}
317320
]
318321
},
@@ -323,7 +326,7 @@ TestRegister.addTests([
323326
recipeConfig: [
324327
{
325328
"op": "ECDSA Verify",
326-
"args": ["ASN.1 HEX", "SHA-256", PEM_PUB_RSA512, ASCII_TEXT]
329+
"args": ["ASN.1 HEX", "SHA-256", PEM_PUB_RSA512, ASCII_TEXT, "Raw"]
327330
}
328331
]
329332
},
@@ -460,5 +463,73 @@ TestRegister.addTests([
460463
"args": ["Auto", "Raw JSON"]
461464
}
462465
]
466+
},
467+
{
468+
name: "ECDSA Sign/Verify: P-256 with SHA256 UTF8",
469+
input: UTF8_TEXT,
470+
expectedOutput: "Verified OK",
471+
recipeConfig: [
472+
{
473+
"op": "ECDSA Sign",
474+
"args": [P256.privateKeyPkcs1, "SHA-256", "ASN.1 HEX"]
475+
},
476+
{
477+
"op": "ECDSA Verify",
478+
"args": ["ASN.1 HEX", "SHA-256", P256.publicKey, UTF8_TEXT, "Raw"]
479+
}
480+
]
481+
},
482+
{
483+
name: "ECDSA Sign/Verify: P-256 with SHA256 bytes raw",
484+
input: ALL_BYTES,
485+
expectedOutput: "Verified OK",
486+
recipeConfig: [
487+
{
488+
"op": "ECDSA Sign",
489+
"args": [P256.privateKeyPkcs1, "SHA-256", "ASN.1 HEX"]
490+
},
491+
{
492+
"op": "ECDSA Verify",
493+
"args": ["ASN.1 HEX", "SHA-256", P256.publicKey, ALL_BYTES, "Raw"]
494+
}
495+
]
496+
},
497+
{
498+
name: "ECDSA Sign/Verify: P-256 with SHA256 bytes hex",
499+
input: SOME_HEX_BYTES,
500+
expectedOutput: "Verified OK",
501+
recipeConfig: [
502+
{
503+
"op": "From Hex",
504+
"args": ["Auto"]
505+
},
506+
{
507+
"op": "ECDSA Sign",
508+
"args": [P256.privateKeyPkcs1, "SHA-256", "ASN.1 HEX"]
509+
},
510+
{
511+
"op": "ECDSA Verify",
512+
"args": ["ASN.1 HEX", "SHA-256", P256.publicKey, SOME_HEX_BYTES, "Hex"]
513+
}
514+
]
515+
},
516+
{
517+
name: "ECDSA Sign/Verify: P-256 with SHA256 bytes Base64",
518+
input: SOME_BASE64_BYTES,
519+
expectedOutput: "Verified OK",
520+
recipeConfig: [
521+
{
522+
"op": "From Base64",
523+
"args": ["A-Za-z0-9+/=", true]
524+
},
525+
{
526+
"op": "ECDSA Sign",
527+
"args": [P256.privateKeyPkcs1, "SHA-256", "ASN.1 HEX"]
528+
},
529+
{
530+
"op": "ECDSA Verify",
531+
"args": ["ASN.1 HEX", "SHA-256", P256.publicKey, SOME_BASE64_BYTES, "Base64"]
532+
}
533+
]
463534
}
464535
]);

0 commit comments

Comments
 (0)