cas-typescript-sdk 1.0.16 → 1.0.17
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/README.md +3 -1
- package/index.d.ts +9 -7
- package/index.node +0 -0
- package/lib/digital-signature/digital-siganture-sha-512.d.ts +4 -2
- package/lib/digital-signature/digital-siganture-sha-512.js +18 -0
- package/lib/digital-signature/digital-signature-base.d.ts +4 -2
- package/lib/digital-signature/digital-signaturte-sha-256.d.ts +4 -2
- package/lib/digital-signature/digital-signaturte-sha-256.js +18 -0
- package/lib/digital-signature/index.d.ts +5 -4
- package/lib/digital-signature/index.js +9 -6
- package/lib/index.d.ts +2 -1
- package/lib/index.js +6 -1
- package/package.json +1 -1
- package/src/digital_signature/cas_digital_signature_rsa.rs +6 -6
- package/src/digital_signature/sha_256_ed25519.rs +69 -0
- package/src/digital_signature/sha_256_rsa.rs +7 -7
- package/src/digital_signature/sha_512_ed25519.rs +7 -7
- package/src/digital_signature/sha_512_rsa.rs +7 -7
- package/src/lib.rs +1 -0
- package/src-ts/digital-signature/digital-siganture-sha-512.ts +22 -2
- package/src-ts/digital-signature/digital-signature-base.ts +4 -2
- package/src-ts/digital-signature/digital-signaturte-sha-256.ts +22 -2
- package/src-ts/digital-signature/index.ts +11 -4
- package/src-ts/index.ts +10 -0
- package/test-ts/digital-signature.test.spec.ts +49 -5
- package/src-ts/global.d.ts +0 -2
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# cas-typescript-sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://discord.gg/7bXXCQj45q)
|
|
4
|
+
|
|
5
|
+
Ever wanted all of your most useful cryptographic operations in one module and not have to surf documentation for various packages?
|
|
4
6
|
CAS is here to provide a unified development experience as an abstract layer to the RustCrypto and Dalek-Cryptography suite of algorithms.
|
|
5
7
|
The official NPM page can be found [here](https://www.npmjs.com/package/cas-typescript-sdk).
|
|
6
8
|
|
package/index.d.ts
CHANGED
|
@@ -29,12 +29,14 @@ export function encryptPlaintextRsa(publicKey: string, plaintext: Array<number>)
|
|
|
29
29
|
export function decryptCiphertextRsa(privateKey: string, ciphertext: Array<number>): Array<number>
|
|
30
30
|
export function signRsa(privateKey: string, hash: Array<number>): Array<number>
|
|
31
31
|
export function verifyRsa(publicKey: string, hash: Array<number>, signature: Array<number>): boolean
|
|
32
|
-
export function sha512RsaDigitalSignature(rsaKeySize: number, dataToSign: Array<number>):
|
|
32
|
+
export function sha512RsaDigitalSignature(rsaKeySize: number, dataToSign: Array<number>): RsaDigitalSignatureResult
|
|
33
33
|
export function sha512RsaVerifyDigitalSignature(publicKey: string, dataToVerify: Array<number>, signature: Array<number>): boolean
|
|
34
|
-
export function sha256RsaDigitalSignature(rsaKeySize: number, dataToSign: Array<number>):
|
|
34
|
+
export function sha256RsaDigitalSignature(rsaKeySize: number, dataToSign: Array<number>): RsaDigitalSignatureResult
|
|
35
35
|
export function sha256RsaVerifyDigitalSignature(publicKey: string, dataToVerify: Array<number>, signature: Array<number>): boolean
|
|
36
|
-
export function sha512Ed25519DigitalSignature(dataToSign: Array<number>):
|
|
36
|
+
export function sha512Ed25519DigitalSignature(dataToSign: Array<number>): Shaed25519DalekDigitalSignatureResult
|
|
37
37
|
export function sha512Ed25519DigitalSignatureVerify(publicKey: Array<number>, dataToVerify: Array<number>, signature: Array<number>): boolean
|
|
38
|
+
export function sha256Ed25519DigitalSignature(dataToSign: Array<number>): Shaed25519DalekDigitalSignatureResult
|
|
39
|
+
export function sha256Ed25519DigitalSignatureVerify(publicKey: Array<number>, dataToVerify: Array<number>, signature: Array<number>): boolean
|
|
38
40
|
export type x25519SecretPublicKeyResult = X25519SecretPublicKeyResult
|
|
39
41
|
export class X25519SecretPublicKeyResult {
|
|
40
42
|
publicKey: Array<number>
|
|
@@ -52,15 +54,15 @@ export class RsaKeyPairResult {
|
|
|
52
54
|
publicKey: string
|
|
53
55
|
constructor(privateKey: string, publicKey: string)
|
|
54
56
|
}
|
|
55
|
-
export type
|
|
56
|
-
export class
|
|
57
|
+
export type RSADigitalSignatureResult = RsaDigitalSignatureResult
|
|
58
|
+
export class RsaDigitalSignatureResult {
|
|
57
59
|
publicKey: string
|
|
58
60
|
privateKey: string
|
|
59
61
|
signature: Array<number>
|
|
60
62
|
constructor(publicKey: string, privateKey: string, signature: Array<number>)
|
|
61
63
|
}
|
|
62
|
-
export type
|
|
63
|
-
export class
|
|
64
|
+
export type SHAED25519DalekDigitalSignatureResult = Shaed25519DalekDigitalSignatureResult
|
|
65
|
+
export class Shaed25519DalekDigitalSignatureResult {
|
|
64
66
|
publicKey: Array<number>
|
|
65
67
|
signature: Array<number>
|
|
66
68
|
constructor(publicKey: Array<number>, signature: Array<number>)
|
package/index.node
CHANGED
|
Binary file
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RsaDigitalSignatureResult, SHAED25519DalekDigitalSignatureResult } from "../../index";
|
|
2
2
|
import { IDigitalSignature } from "./digital-signature-base";
|
|
3
3
|
export declare class DigitalSignatureSHA512Wrapper implements IDigitalSignature {
|
|
4
|
-
|
|
4
|
+
createED25519(dataToSign: number[]): SHAED25519DalekDigitalSignatureResult;
|
|
5
|
+
verifyED25519(publicKey: number[], dataToVerify: number[], signature: number[]): boolean;
|
|
6
|
+
createRsa(rsa_key_size: number, data_to_sign: number[]): RsaDigitalSignatureResult;
|
|
5
7
|
verifyRSa(public_key: string, data_to_verify: number[], signature: number[]): boolean;
|
|
6
8
|
}
|
|
@@ -3,6 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DigitalSignatureSHA512Wrapper = void 0;
|
|
4
4
|
const index_1 = require("../../index");
|
|
5
5
|
class DigitalSignatureSHA512Wrapper {
|
|
6
|
+
createED25519(dataToSign) {
|
|
7
|
+
if (dataToSign?.length === 0) {
|
|
8
|
+
throw new Error("Must provide allocated data to sign");
|
|
9
|
+
}
|
|
10
|
+
return (0, index_1.sha512Ed25519DigitalSignature)(dataToSign);
|
|
11
|
+
}
|
|
12
|
+
verifyED25519(publicKey, dataToVerify, signature) {
|
|
13
|
+
if (!publicKey) {
|
|
14
|
+
throw new Error("You must provide a public key for verify with ED25519");
|
|
15
|
+
}
|
|
16
|
+
if (dataToVerify?.length === 0) {
|
|
17
|
+
throw new Error("Must provide allocated data to verify");
|
|
18
|
+
}
|
|
19
|
+
if (signature?.length === 0) {
|
|
20
|
+
throw new Error("Must provide allocated signature to verify");
|
|
21
|
+
}
|
|
22
|
+
return (0, index_1.sha512Ed25519DigitalSignatureVerify)(publicKey, dataToVerify, signature);
|
|
23
|
+
}
|
|
6
24
|
createRsa(rsa_key_size, data_to_sign) {
|
|
7
25
|
if (rsa_key_size !== 1024 && rsa_key_size !== 2048 && rsa_key_size !== 4096) {
|
|
8
26
|
throw new Error("You need to provide an appropriate RSA key size.");
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RSADigitalSignatureResult, SHAED25519DalekDigitalSignatureResult } from "../../index";
|
|
2
2
|
export interface IDigitalSignature {
|
|
3
|
-
createRsa(rsa_key_size: number, data_to_sign: Array<number>):
|
|
3
|
+
createRsa(rsa_key_size: number, data_to_sign: Array<number>): RSADigitalSignatureResult;
|
|
4
4
|
verifyRSa(public_key: string, data_to_verify: Array<number>, signature: Array<number>): boolean;
|
|
5
|
+
createED25519(dataToSign: Array<number>): SHAED25519DalekDigitalSignatureResult;
|
|
6
|
+
verifyED25519(publicKey: Array<number>, dataToVerify: Array<number>, signature: Array<number>): boolean;
|
|
5
7
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RsaDigitalSignatureResult, Shaed25519DalekDigitalSignatureResult } from "../../index";
|
|
2
2
|
import { IDigitalSignature } from "./digital-signature-base";
|
|
3
3
|
export declare class DigitalSignatureSHA256Wrapper implements IDigitalSignature {
|
|
4
|
-
|
|
4
|
+
createED25519(dataToSign: number[]): Shaed25519DalekDigitalSignatureResult;
|
|
5
|
+
verifyED25519(publicKey: number[], dataToVerify: number[], signature: number[]): boolean;
|
|
6
|
+
createRsa(rsa_key_size: number, data_to_sign: number[]): RsaDigitalSignatureResult;
|
|
5
7
|
verifyRSa(public_key: string, data_to_verify: number[], signature: number[]): boolean;
|
|
6
8
|
}
|
|
@@ -3,6 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DigitalSignatureSHA256Wrapper = void 0;
|
|
4
4
|
const index_1 = require("../../index");
|
|
5
5
|
class DigitalSignatureSHA256Wrapper {
|
|
6
|
+
createED25519(dataToSign) {
|
|
7
|
+
if (dataToSign?.length === 0) {
|
|
8
|
+
throw new Error("Must provide allocated data to sign");
|
|
9
|
+
}
|
|
10
|
+
return (0, index_1.sha256Ed25519DigitalSignature)(dataToSign);
|
|
11
|
+
}
|
|
12
|
+
verifyED25519(publicKey, dataToVerify, signature) {
|
|
13
|
+
if (!publicKey) {
|
|
14
|
+
throw new Error("You must provide a public key for verify with ED25519");
|
|
15
|
+
}
|
|
16
|
+
if (dataToVerify?.length === 0) {
|
|
17
|
+
throw new Error("Must provide allocated data to verify");
|
|
18
|
+
}
|
|
19
|
+
if (signature?.length === 0) {
|
|
20
|
+
throw new Error("Must provide allocated signature to verify");
|
|
21
|
+
}
|
|
22
|
+
return (0, index_1.sha256Ed25519DigitalSignatureVerify)(publicKey, dataToVerify, signature);
|
|
23
|
+
}
|
|
6
24
|
createRsa(rsa_key_size, data_to_sign) {
|
|
7
25
|
if (rsa_key_size !== 1024 && rsa_key_size !== 2048 && rsa_key_size !== 4096) {
|
|
8
26
|
throw new Error("You need to provide an appropriate RSA key size.");
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
1
|
+
import { DigitalSignatureType } from "./digital-signature-factory";
|
|
2
|
+
import { DigitalSignatureFactory } from "./digital-signature-factory";
|
|
3
|
+
import { DigitalSignatureSHA256Wrapper } from "./digital-signaturte-sha-256";
|
|
4
|
+
import { DigitalSignatureSHA512Wrapper } from "./digital-siganture-sha-512";
|
|
5
|
+
export { DigitalSignatureFactory, DigitalSignatureSHA256Wrapper, DigitalSignatureSHA512Wrapper, DigitalSignatureType };
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DigitalSignatureType = void 0;
|
|
4
|
-
|
|
5
|
-
(function (
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
exports.DigitalSignatureType = exports.DigitalSignatureSHA512Wrapper = exports.DigitalSignatureSHA256Wrapper = exports.DigitalSignatureFactory = void 0;
|
|
4
|
+
const digital_signature_factory_1 = require("./digital-signature-factory");
|
|
5
|
+
Object.defineProperty(exports, "DigitalSignatureType", { enumerable: true, get: function () { return digital_signature_factory_1.DigitalSignatureType; } });
|
|
6
|
+
const digital_signature_factory_2 = require("./digital-signature-factory");
|
|
7
|
+
Object.defineProperty(exports, "DigitalSignatureFactory", { enumerable: true, get: function () { return digital_signature_factory_2.DigitalSignatureFactory; } });
|
|
8
|
+
const digital_signaturte_sha_256_1 = require("./digital-signaturte-sha-256");
|
|
9
|
+
Object.defineProperty(exports, "DigitalSignatureSHA256Wrapper", { enumerable: true, get: function () { return digital_signaturte_sha_256_1.DigitalSignatureSHA256Wrapper; } });
|
|
10
|
+
const digital_siganture_sha_512_1 = require("./digital-siganture-sha-512");
|
|
11
|
+
Object.defineProperty(exports, "DigitalSignatureSHA512Wrapper", { enumerable: true, get: function () { return digital_siganture_sha_512_1.DigitalSignatureSHA512Wrapper; } });
|
package/lib/index.d.ts
CHANGED
|
@@ -4,4 +4,5 @@ import { X25519Wrapper } from "./key_exchange/index";
|
|
|
4
4
|
import { AESWrapper } from "./symmetric/index";
|
|
5
5
|
import { RsaKeyPairResult, RSAWrapper } from "./asymmetric/index";
|
|
6
6
|
import { AesRsaHybridEncryptResult, AESRSAHybridInitializer, HybridEncryptionWrapper } from "./hybrid/index";
|
|
7
|
-
|
|
7
|
+
import { DigitalSignatureFactory, DigitalSignatureSHA256Wrapper, DigitalSignatureSHA512Wrapper, DigitalSignatureType } from "./digital-signature";
|
|
8
|
+
export { AesRsaHybridEncryptResult, AESRSAHybridInitializer, AESWrapper, Argon2Wrapper, BCryptWrapper, HasherFactory, HasherType, HybridEncryptionWrapper, PasswordHasherFactory, PasswordHasherType, RsaKeyPairResult, RSAWrapper, ScryptWrapper, SHAWrapper, X25519Wrapper, DigitalSignatureFactory, DigitalSignatureSHA256Wrapper, DigitalSignatureSHA512Wrapper, DigitalSignatureType, };
|
package/lib/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.X25519Wrapper = exports.SHAWrapper = exports.ScryptWrapper = exports.RSAWrapper = exports.RsaKeyPairResult = exports.PasswordHasherType = exports.PasswordHasherFactory = exports.HybridEncryptionWrapper = exports.HasherType = exports.HasherFactory = exports.BCryptWrapper = exports.Argon2Wrapper = exports.AESWrapper = exports.AESRSAHybridInitializer = exports.AesRsaHybridEncryptResult = void 0;
|
|
3
|
+
exports.DigitalSignatureType = exports.DigitalSignatureSHA512Wrapper = exports.DigitalSignatureSHA256Wrapper = exports.DigitalSignatureFactory = exports.X25519Wrapper = exports.SHAWrapper = exports.ScryptWrapper = exports.RSAWrapper = exports.RsaKeyPairResult = exports.PasswordHasherType = exports.PasswordHasherFactory = exports.HybridEncryptionWrapper = exports.HasherType = exports.HasherFactory = exports.BCryptWrapper = exports.Argon2Wrapper = exports.AESWrapper = exports.AESRSAHybridInitializer = exports.AesRsaHybridEncryptResult = void 0;
|
|
4
4
|
const index_1 = require("./password-hashers/index");
|
|
5
5
|
Object.defineProperty(exports, "Argon2Wrapper", { enumerable: true, get: function () { return index_1.Argon2Wrapper; } });
|
|
6
6
|
Object.defineProperty(exports, "BCryptWrapper", { enumerable: true, get: function () { return index_1.BCryptWrapper; } });
|
|
@@ -22,3 +22,8 @@ const index_6 = require("./hybrid/index");
|
|
|
22
22
|
Object.defineProperty(exports, "AesRsaHybridEncryptResult", { enumerable: true, get: function () { return index_6.AesRsaHybridEncryptResult; } });
|
|
23
23
|
Object.defineProperty(exports, "AESRSAHybridInitializer", { enumerable: true, get: function () { return index_6.AESRSAHybridInitializer; } });
|
|
24
24
|
Object.defineProperty(exports, "HybridEncryptionWrapper", { enumerable: true, get: function () { return index_6.HybridEncryptionWrapper; } });
|
|
25
|
+
const digital_signature_1 = require("./digital-signature");
|
|
26
|
+
Object.defineProperty(exports, "DigitalSignatureFactory", { enumerable: true, get: function () { return digital_signature_1.DigitalSignatureFactory; } });
|
|
27
|
+
Object.defineProperty(exports, "DigitalSignatureSHA256Wrapper", { enumerable: true, get: function () { return digital_signature_1.DigitalSignatureSHA256Wrapper; } });
|
|
28
|
+
Object.defineProperty(exports, "DigitalSignatureSHA512Wrapper", { enumerable: true, get: function () { return digital_signature_1.DigitalSignatureSHA512Wrapper; } });
|
|
29
|
+
Object.defineProperty(exports, "DigitalSignatureType", { enumerable: true, get: function () { return digital_signature_1.DigitalSignatureType; } });
|
package/package.json
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
use napi_derive::napi;
|
|
2
2
|
|
|
3
3
|
#[napi(constructor)]
|
|
4
|
-
pub struct
|
|
4
|
+
pub struct RSADigitalSignatureResult {
|
|
5
5
|
pub public_key: String,
|
|
6
6
|
pub private_key: String,
|
|
7
7
|
pub signature: Vec<u8>,
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
#[napi(constructor)]
|
|
11
|
-
pub struct
|
|
11
|
+
pub struct SHAED25519DalekDigitalSignatureResult {
|
|
12
12
|
pub public_key: Vec<u8>,
|
|
13
13
|
pub signature: Vec<u8>
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
pub trait
|
|
16
|
+
pub trait RSADigitalSignature {
|
|
17
17
|
fn digital_signature_rsa(
|
|
18
18
|
rsa_key_size: u32,
|
|
19
19
|
data_to_sign: Vec<u8>,
|
|
20
|
-
) ->
|
|
20
|
+
) -> RSADigitalSignatureResult;
|
|
21
21
|
fn verify_rsa(public_key: String, data_to_verify: Vec<u8>, signature: Vec<u8>) -> bool;
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
pub trait
|
|
25
|
-
fn digital_signature_ed25519(data_to_sign: Vec<u8>) ->
|
|
24
|
+
pub trait ED25519DigitalSignature {
|
|
25
|
+
fn digital_signature_ed25519(data_to_sign: Vec<u8>) -> SHAED25519DalekDigitalSignatureResult;
|
|
26
26
|
fn digital_signature_ed25519_verify(public_key: Vec<u8>, data_to_verify: Vec<u8>, signature: Vec<u8>) -> bool;
|
|
27
27
|
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
use ed25519_dalek::{Keypair, Signature, Signer, Verifier};
|
|
2
|
+
use napi_derive::napi;
|
|
3
|
+
use sha3::{Digest, Sha3_256};
|
|
4
|
+
|
|
5
|
+
use super::cas_digital_signature_rsa::{
|
|
6
|
+
ED25519DigitalSignature, SHAED25519DalekDigitalSignatureResult,
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
pub struct SHA256ED25519DigitalSignature;
|
|
10
|
+
|
|
11
|
+
impl ED25519DigitalSignature for SHA256ED25519DigitalSignature {
|
|
12
|
+
fn digital_signature_ed25519(data_to_sign: Vec<u8>) -> SHAED25519DalekDigitalSignatureResult {
|
|
13
|
+
let mut hasher = Sha3_256::new();
|
|
14
|
+
hasher.update(data_to_sign);
|
|
15
|
+
let sha_hasher_result = hasher.finalize();
|
|
16
|
+
let mut csprng = rand_07::rngs::OsRng {};
|
|
17
|
+
let keypair = ed25519_dalek::Keypair::generate(&mut csprng);
|
|
18
|
+
|
|
19
|
+
let signature = keypair.sign(&sha_hasher_result);
|
|
20
|
+
let signature_bytes = signature.to_bytes();
|
|
21
|
+
let public_keypair_bytes = keypair.public.to_bytes();
|
|
22
|
+
let result = SHAED25519DalekDigitalSignatureResult {
|
|
23
|
+
public_key: public_keypair_bytes.to_vec(),
|
|
24
|
+
signature: signature_bytes.to_vec(),
|
|
25
|
+
};
|
|
26
|
+
result
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
fn digital_signature_ed25519_verify(public_key: Vec<u8>, data_to_verify: Vec<u8>, signature: Vec<u8>) -> bool {
|
|
30
|
+
let mut hasher = Sha3_256::new();
|
|
31
|
+
hasher.update(data_to_verify);
|
|
32
|
+
let sha_hasher_result = hasher.finalize();
|
|
33
|
+
|
|
34
|
+
let public_key_parsed = ed25519_dalek::PublicKey::from_bytes(&public_key).unwrap();
|
|
35
|
+
let signature_parsed = Signature::from_bytes(&signature).unwrap();
|
|
36
|
+
return public_key_parsed
|
|
37
|
+
.verify(&sha_hasher_result, &signature_parsed)
|
|
38
|
+
.is_ok();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
#[napi]
|
|
43
|
+
pub fn sha_256_ed25519_digital_signature(data_to_sign: Vec<u8>) -> SHAED25519DalekDigitalSignatureResult {
|
|
44
|
+
return SHA256ED25519DigitalSignature::digital_signature_ed25519(data_to_sign);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
#[napi]
|
|
48
|
+
pub fn sha_256_ed25519_digital_signature_verify(public_key: Vec<u8>, data_to_verify: Vec<u8>, signature: Vec<u8>) -> bool {
|
|
49
|
+
return SHA256ED25519DigitalSignature::digital_signature_ed25519_verify(public_key, data_to_verify, signature)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
#[test]
|
|
53
|
+
fn sha_256_ed25519_test() {
|
|
54
|
+
let key_size: u32 = 1024;
|
|
55
|
+
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
56
|
+
let signature_result: SHAED25519DalekDigitalSignatureResult = SHA256ED25519DigitalSignature::digital_signature_ed25519(data_to_sign.clone());
|
|
57
|
+
let is_verified: bool = SHA256ED25519DigitalSignature::digital_signature_ed25519_verify(signature_result.public_key, data_to_sign, signature_result.signature);
|
|
58
|
+
assert_eq!(is_verified, true);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
#[test]
|
|
62
|
+
fn sha_512_ed25519_test_fail() {
|
|
63
|
+
let key_size: u32 = 1024;
|
|
64
|
+
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
65
|
+
let signature_result: SHAED25519DalekDigitalSignatureResult = SHA256ED25519DigitalSignature::digital_signature_ed25519(data_to_sign.clone());
|
|
66
|
+
let not_original_data = b"NOtTHoseBytes".to_vec();
|
|
67
|
+
let is_verified: bool = SHA256ED25519DigitalSignature::digital_signature_ed25519_verify(signature_result.public_key, not_original_data, signature_result.signature);
|
|
68
|
+
assert_eq!(is_verified, false);
|
|
69
|
+
}
|
|
@@ -8,15 +8,15 @@ use rsa::{
|
|
|
8
8
|
use sha3::{Digest, Sha3_256};
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
use super::cas_digital_signature_rsa::{
|
|
11
|
+
use super::cas_digital_signature_rsa::{RSADigitalSignatureResult, RSADigitalSignature};
|
|
12
12
|
|
|
13
13
|
pub struct SHA256RSADigitalSignature;
|
|
14
14
|
|
|
15
|
-
impl
|
|
15
|
+
impl RSADigitalSignature for SHA256RSADigitalSignature {
|
|
16
16
|
fn digital_signature_rsa(
|
|
17
17
|
rsa_key_size: u32,
|
|
18
18
|
data_to_sign: Vec<u8>,
|
|
19
|
-
) ->
|
|
19
|
+
) -> RSADigitalSignatureResult {
|
|
20
20
|
let mut hasher = Sha3_256::new();
|
|
21
21
|
hasher.update(data_to_sign);
|
|
22
22
|
let sha_hasher_result = hasher.finalize();
|
|
@@ -27,7 +27,7 @@ impl CASRSADigitalSignature for SHA256RSADigitalSignature {
|
|
|
27
27
|
let mut signed_data = private_key
|
|
28
28
|
.sign(Pkcs1v15Sign::new_unprefixed(), &sha_hasher_result)
|
|
29
29
|
.unwrap();
|
|
30
|
-
let result =
|
|
30
|
+
let result = RSADigitalSignatureResult {
|
|
31
31
|
private_key: private_key
|
|
32
32
|
.to_pkcs8_pem(rsa::pkcs8::LineEnding::LF)
|
|
33
33
|
.unwrap()
|
|
@@ -63,7 +63,7 @@ impl CASRSADigitalSignature for SHA256RSADigitalSignature {
|
|
|
63
63
|
pub fn sha_256_rsa_digital_signature(
|
|
64
64
|
rsa_key_size: u32,
|
|
65
65
|
data_to_sign: Vec<u8>,
|
|
66
|
-
) ->
|
|
66
|
+
) -> RSADigitalSignatureResult {
|
|
67
67
|
return SHA256RSADigitalSignature::digital_signature_rsa(rsa_key_size, data_to_sign);
|
|
68
68
|
}
|
|
69
69
|
|
|
@@ -80,7 +80,7 @@ pub fn sha_256_rsa_verify_digital_signature(
|
|
|
80
80
|
fn sha_256_rsa_digital_signature_test() {
|
|
81
81
|
let key_size: u32 = 1024;
|
|
82
82
|
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
83
|
-
let signature_result:
|
|
83
|
+
let signature_result: RSADigitalSignatureResult = SHA256RSADigitalSignature::digital_signature_rsa(key_size, data_to_sign.clone());
|
|
84
84
|
let is_verified: bool = SHA256RSADigitalSignature::verify_rsa(signature_result.public_key, data_to_sign, signature_result.signature);
|
|
85
85
|
assert_eq!(is_verified, true);
|
|
86
86
|
}
|
|
@@ -89,7 +89,7 @@ fn sha_256_rsa_digital_signature_test() {
|
|
|
89
89
|
fn sha_256_rsa_digital_signature_fail_test() {
|
|
90
90
|
let key_size: u32 = 1024;
|
|
91
91
|
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
92
|
-
let signature_result:
|
|
92
|
+
let signature_result: RSADigitalSignatureResult = SHA256RSADigitalSignature::digital_signature_rsa(key_size, data_to_sign.clone());
|
|
93
93
|
let new_data = b"NOtTheOriginalData".to_vec();
|
|
94
94
|
let is_verified: bool = SHA256RSADigitalSignature::verify_rsa(signature_result.public_key, new_data, signature_result.signature);
|
|
95
95
|
assert_eq!(is_verified, false);
|
|
@@ -3,15 +3,15 @@ use napi_derive::napi;
|
|
|
3
3
|
use sha3::{Digest, Sha3_512};
|
|
4
4
|
|
|
5
5
|
use super::cas_digital_signature_rsa::{
|
|
6
|
-
|
|
6
|
+
ED25519DigitalSignature, SHAED25519DalekDigitalSignatureResult,
|
|
7
7
|
};
|
|
8
8
|
|
|
9
9
|
pub struct SHA512ED25519DigitalSignature;
|
|
10
10
|
|
|
11
|
-
impl
|
|
11
|
+
impl ED25519DigitalSignature for SHA512ED25519DigitalSignature {
|
|
12
12
|
fn digital_signature_ed25519(
|
|
13
13
|
data_to_sign: Vec<u8>,
|
|
14
|
-
) ->
|
|
14
|
+
) -> SHAED25519DalekDigitalSignatureResult {
|
|
15
15
|
let mut hasher = Sha3_512::new();
|
|
16
16
|
hasher.update(data_to_sign);
|
|
17
17
|
let sha_hasher_result = hasher.finalize();
|
|
@@ -21,7 +21,7 @@ impl CASED25519DigitalSignature for SHA512ED25519DigitalSignature {
|
|
|
21
21
|
let signature = keypair.sign(&sha_hasher_result);
|
|
22
22
|
let signature_bytes = signature.to_bytes();
|
|
23
23
|
let public_keypair_bytes = keypair.public.to_bytes();
|
|
24
|
-
let result =
|
|
24
|
+
let result = SHAED25519DalekDigitalSignatureResult {
|
|
25
25
|
public_key: public_keypair_bytes.to_vec(),
|
|
26
26
|
signature: signature_bytes.to_vec(),
|
|
27
27
|
};
|
|
@@ -46,7 +46,7 @@ impl CASED25519DigitalSignature for SHA512ED25519DigitalSignature {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
#[napi]
|
|
49
|
-
pub fn sha_512_ed25519_digital_signature(data_to_sign: Vec<u8>) ->
|
|
49
|
+
pub fn sha_512_ed25519_digital_signature(data_to_sign: Vec<u8>) -> SHAED25519DalekDigitalSignatureResult {
|
|
50
50
|
return SHA512ED25519DigitalSignature::digital_signature_ed25519(data_to_sign);
|
|
51
51
|
}
|
|
52
52
|
|
|
@@ -59,7 +59,7 @@ pub fn sha_512_ed25519_digital_signature_verify(public_key: Vec<u8>, data_to_ver
|
|
|
59
59
|
fn sha_512_ed25519_test() {
|
|
60
60
|
let key_size: u32 = 1024;
|
|
61
61
|
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
62
|
-
let signature_result:
|
|
62
|
+
let signature_result: SHAED25519DalekDigitalSignatureResult = SHA512ED25519DigitalSignature::digital_signature_ed25519(data_to_sign.clone());
|
|
63
63
|
let is_verified: bool = SHA512ED25519DigitalSignature::digital_signature_ed25519_verify(signature_result.public_key, data_to_sign, signature_result.signature);
|
|
64
64
|
assert_eq!(is_verified, true);
|
|
65
65
|
}
|
|
@@ -68,7 +68,7 @@ fn sha_512_ed25519_test() {
|
|
|
68
68
|
fn sha_512_ed25519_test_fail() {
|
|
69
69
|
let key_size: u32 = 1024;
|
|
70
70
|
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
71
|
-
let signature_result:
|
|
71
|
+
let signature_result: SHAED25519DalekDigitalSignatureResult = SHA512ED25519DigitalSignature::digital_signature_ed25519(data_to_sign.clone());
|
|
72
72
|
let not_original_data = b"NOtTHoseBytes".to_vec();
|
|
73
73
|
let is_verified: bool = SHA512ED25519DigitalSignature::digital_signature_ed25519_verify(signature_result.public_key, not_original_data, signature_result.signature);
|
|
74
74
|
assert_eq!(is_verified, false);
|
|
@@ -6,14 +6,14 @@ use rsa::{
|
|
|
6
6
|
Pkcs1v15Sign, RsaPrivateKey, RsaPublicKey,
|
|
7
7
|
};
|
|
8
8
|
use sha3::{Digest, Sha3_512};
|
|
9
|
-
use super::cas_digital_signature_rsa::{
|
|
9
|
+
use super::cas_digital_signature_rsa::{RSADigitalSignatureResult, RSADigitalSignature};
|
|
10
10
|
pub struct SHA512RSADigitalSignature;
|
|
11
11
|
|
|
12
|
-
impl
|
|
12
|
+
impl RSADigitalSignature for SHA512RSADigitalSignature {
|
|
13
13
|
fn digital_signature_rsa(
|
|
14
14
|
rsa_key_size: u32,
|
|
15
15
|
data_to_sign: Vec<u8>,
|
|
16
|
-
) ->
|
|
16
|
+
) -> RSADigitalSignatureResult {
|
|
17
17
|
let mut hasher = Sha3_512::new();
|
|
18
18
|
hasher.update(data_to_sign);
|
|
19
19
|
let sha_hasher_result = hasher.finalize();
|
|
@@ -24,7 +24,7 @@ impl CASRSADigitalSignature for SHA512RSADigitalSignature {
|
|
|
24
24
|
let mut signed_data = private_key
|
|
25
25
|
.sign(Pkcs1v15Sign::new_unprefixed(), &sha_hasher_result)
|
|
26
26
|
.unwrap();
|
|
27
|
-
let result =
|
|
27
|
+
let result = RSADigitalSignatureResult {
|
|
28
28
|
private_key: private_key
|
|
29
29
|
.to_pkcs8_pem(rsa::pkcs8::LineEnding::LF)
|
|
30
30
|
.unwrap()
|
|
@@ -60,7 +60,7 @@ impl CASRSADigitalSignature for SHA512RSADigitalSignature {
|
|
|
60
60
|
pub fn sha_512_rsa_digital_signature(
|
|
61
61
|
rsa_key_size: u32,
|
|
62
62
|
data_to_sign: Vec<u8>,
|
|
63
|
-
) ->
|
|
63
|
+
) -> RSADigitalSignatureResult {
|
|
64
64
|
return SHA512RSADigitalSignature::digital_signature_rsa(rsa_key_size, data_to_sign);
|
|
65
65
|
}
|
|
66
66
|
|
|
@@ -77,7 +77,7 @@ pub fn sha_512_rsa_verify_digital_signature(
|
|
|
77
77
|
fn sha_512_rsa_digital_signature_test() {
|
|
78
78
|
let key_size: u32 = 1024;
|
|
79
79
|
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
80
|
-
let signature_result:
|
|
80
|
+
let signature_result: RSADigitalSignatureResult = SHA512RSADigitalSignature::digital_signature_rsa(key_size, data_to_sign.clone());
|
|
81
81
|
let is_verified: bool = SHA512RSADigitalSignature::verify_rsa(signature_result.public_key, data_to_sign, signature_result.signature);
|
|
82
82
|
assert_eq!(is_verified, true);
|
|
83
83
|
}
|
|
@@ -86,7 +86,7 @@ fn sha_512_rsa_digital_signature_test() {
|
|
|
86
86
|
fn sha_512_rsa_digital_signature_fail_test() {
|
|
87
87
|
let key_size: u32 = 1024;
|
|
88
88
|
let data_to_sign = b"GetTheseBytes".to_vec();
|
|
89
|
-
let signature_result:
|
|
89
|
+
let signature_result: RSADigitalSignatureResult = SHA512RSADigitalSignature::digital_signature_rsa(key_size, data_to_sign.clone());
|
|
90
90
|
let new_data = b"NOtTheOriginalData".to_vec();
|
|
91
91
|
let is_verified: bool = SHA512RSADigitalSignature::verify_rsa(signature_result.public_key, new_data, signature_result.signature);
|
|
92
92
|
assert_eq!(is_verified, false);
|
package/src/lib.rs
CHANGED
|
@@ -1,9 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RsaDigitalSignatureResult, SHAED25519DalekDigitalSignatureResult, sha512Ed25519DigitalSignature, sha512Ed25519DigitalSignatureVerify, sha512RsaDigitalSignature, sha512RsaVerifyDigitalSignature } from "../../index";
|
|
2
2
|
import { IDigitalSignature } from "./digital-signature-base";
|
|
3
3
|
|
|
4
4
|
export class DigitalSignatureSHA512Wrapper implements IDigitalSignature {
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
createED25519(dataToSign: number[]): SHAED25519DalekDigitalSignatureResult {
|
|
7
|
+
if (dataToSign?.length === 0) {
|
|
8
|
+
throw new Error("Must provide allocated data to sign");
|
|
9
|
+
}
|
|
10
|
+
return sha512Ed25519DigitalSignature(dataToSign);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
verifyED25519(publicKey: number[], dataToVerify: number[], signature: number[]): boolean {
|
|
14
|
+
if (!publicKey) {
|
|
15
|
+
throw new Error("You must provide a public key for verify with ED25519");
|
|
16
|
+
}
|
|
17
|
+
if (dataToVerify?.length === 0) {
|
|
18
|
+
throw new Error("Must provide allocated data to verify");
|
|
19
|
+
}
|
|
20
|
+
if (signature?.length === 0) {
|
|
21
|
+
throw new Error("Must provide allocated signature to verify");
|
|
22
|
+
}
|
|
23
|
+
return sha512Ed25519DigitalSignatureVerify(publicKey, dataToVerify, signature);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
createRsa(rsa_key_size: number, data_to_sign: number[]): RsaDigitalSignatureResult {
|
|
7
27
|
if (rsa_key_size !== 1024 && rsa_key_size !== 2048 && rsa_key_size !== 4096) {
|
|
8
28
|
throw new Error("You need to provide an appropriate RSA key size.");
|
|
9
29
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RSADigitalSignatureResult, SHAED25519DalekDigitalSignatureResult } from "../../index";
|
|
2
2
|
|
|
3
3
|
export interface IDigitalSignature {
|
|
4
|
-
createRsa(rsa_key_size: number, data_to_sign: Array<number>):
|
|
4
|
+
createRsa(rsa_key_size: number, data_to_sign: Array<number>): RSADigitalSignatureResult;
|
|
5
5
|
verifyRSa(public_key: string, data_to_verify: Array<number>, signature: Array<number>): boolean;
|
|
6
|
+
createED25519(dataToSign: Array<number>): SHAED25519DalekDigitalSignatureResult;
|
|
7
|
+
verifyED25519(publicKey: Array<number>, dataToVerify: Array<number>, signature: Array<number>): boolean;
|
|
6
8
|
}
|
|
@@ -1,9 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RsaDigitalSignatureResult, SHAED25519DalekDigitalSignatureResult, Shaed25519DalekDigitalSignatureResult, sha256Ed25519DigitalSignature, sha256Ed25519DigitalSignatureVerify, sha256RsaDigitalSignature, sha256RsaVerifyDigitalSignature, sha512Ed25519DigitalSignature } from "../../index";
|
|
2
2
|
import { IDigitalSignature } from "./digital-signature-base";
|
|
3
3
|
|
|
4
4
|
export class DigitalSignatureSHA256Wrapper implements IDigitalSignature {
|
|
5
|
+
|
|
6
|
+
createED25519(dataToSign: number[]): Shaed25519DalekDigitalSignatureResult {
|
|
7
|
+
if (dataToSign?.length === 0) {
|
|
8
|
+
throw new Error("Must provide allocated data to sign");
|
|
9
|
+
}
|
|
10
|
+
return sha256Ed25519DigitalSignature(dataToSign);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
verifyED25519(publicKey: number[], dataToVerify: number[], signature: number[]): boolean {
|
|
14
|
+
if (!publicKey) {
|
|
15
|
+
throw new Error("You must provide a public key for verify with ED25519");
|
|
16
|
+
}
|
|
17
|
+
if (dataToVerify?.length === 0) {
|
|
18
|
+
throw new Error("Must provide allocated data to verify");
|
|
19
|
+
}
|
|
20
|
+
if (signature?.length === 0) {
|
|
21
|
+
throw new Error("Must provide allocated signature to verify");
|
|
22
|
+
}
|
|
23
|
+
return sha256Ed25519DigitalSignatureVerify(publicKey, dataToVerify, signature);
|
|
24
|
+
}
|
|
5
25
|
|
|
6
|
-
createRsa(rsa_key_size: number, data_to_sign: number[]):
|
|
26
|
+
createRsa(rsa_key_size: number, data_to_sign: number[]): RsaDigitalSignatureResult {
|
|
7
27
|
if (rsa_key_size !== 1024 && rsa_key_size !== 2048 && rsa_key_size !== 4096) {
|
|
8
28
|
throw new Error("You need to provide an appropriate RSA key size.");
|
|
9
29
|
}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
1
|
+
import { DigitalSignatureType } from "./digital-signature-factory";
|
|
2
|
+
import { DigitalSignatureFactory } from "./digital-signature-factory";
|
|
3
|
+
import { DigitalSignatureSHA256Wrapper } from "./digital-signaturte-sha-256";
|
|
4
|
+
import { DigitalSignatureSHA512Wrapper } from "./digital-siganture-sha-512";
|
|
5
|
+
|
|
6
|
+
export {
|
|
7
|
+
DigitalSignatureFactory,
|
|
8
|
+
DigitalSignatureSHA256Wrapper,
|
|
9
|
+
DigitalSignatureSHA512Wrapper,
|
|
10
|
+
DigitalSignatureType
|
|
11
|
+
};
|
package/src-ts/index.ts
CHANGED
|
@@ -14,6 +14,12 @@ import {
|
|
|
14
14
|
AESRSAHybridInitializer,
|
|
15
15
|
HybridEncryptionWrapper,
|
|
16
16
|
} from "./hybrid/index";
|
|
17
|
+
import {
|
|
18
|
+
DigitalSignatureFactory,
|
|
19
|
+
DigitalSignatureSHA256Wrapper,
|
|
20
|
+
DigitalSignatureSHA512Wrapper,
|
|
21
|
+
DigitalSignatureType,
|
|
22
|
+
} from "./digital-signature";
|
|
17
23
|
|
|
18
24
|
export {
|
|
19
25
|
AesRsaHybridEncryptResult,
|
|
@@ -31,4 +37,8 @@ export {
|
|
|
31
37
|
ScryptWrapper,
|
|
32
38
|
SHAWrapper,
|
|
33
39
|
X25519Wrapper,
|
|
40
|
+
DigitalSignatureFactory,
|
|
41
|
+
DigitalSignatureSHA256Wrapper,
|
|
42
|
+
DigitalSignatureSHA512Wrapper,
|
|
43
|
+
DigitalSignatureType,
|
|
34
44
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { assert } from "chai";
|
|
2
2
|
import { DigitalSignatureFactory, DigitalSignatureType } from "../src-ts/digital-signature/digital-signature-factory";
|
|
3
|
-
import {
|
|
3
|
+
import { RSADigitalSignatureResult } from "../index";
|
|
4
4
|
|
|
5
5
|
describe("Digital Signature", () => {
|
|
6
6
|
it("SHA 512 RSA pass", () => {
|
|
@@ -8,7 +8,7 @@ describe("Digital Signature", () => {
|
|
|
8
8
|
const tohashed: string = "This is my array to encrypt";
|
|
9
9
|
const encoder = new TextEncoder();
|
|
10
10
|
const tohashBytes: Array<number> = Array.from(encoder.encode(tohashed));
|
|
11
|
-
const dsResult:
|
|
11
|
+
const dsResult: RSADigitalSignatureResult = shaDsWrapper.createRsa(2048, tohashBytes);
|
|
12
12
|
const verify = shaDsWrapper.verifyRSa(dsResult.publicKey, tohashBytes, dsResult.signature);
|
|
13
13
|
assert.equal(verify, true);
|
|
14
14
|
});
|
|
@@ -20,7 +20,7 @@ describe("Digital Signature", () => {
|
|
|
20
20
|
const encoder = new TextEncoder();
|
|
21
21
|
const tohashBytes: Array<number> = Array.from(encoder.encode(tohashed));
|
|
22
22
|
const badBytes: Array<number> = Array.from(encoder.encode(notOriginal));
|
|
23
|
-
const dsResult:
|
|
23
|
+
const dsResult: RSADigitalSignatureResult = shaDsWrapper.createRsa(4096, tohashBytes);
|
|
24
24
|
const verify = shaDsWrapper.verifyRSa(dsResult.publicKey, badBytes, dsResult.signature);
|
|
25
25
|
assert.equal(verify, false);
|
|
26
26
|
});
|
|
@@ -30,7 +30,7 @@ describe("Digital Signature", () => {
|
|
|
30
30
|
const tohashed: string = "This is my array to encrypt";
|
|
31
31
|
const encoder = new TextEncoder();
|
|
32
32
|
const tohashBytes: Array<number> = Array.from(encoder.encode(tohashed));
|
|
33
|
-
const dsResult:
|
|
33
|
+
const dsResult: RSADigitalSignatureResult = shaDsWrapper.createRsa(2048, tohashBytes);
|
|
34
34
|
const verify = shaDsWrapper.verifyRSa(dsResult.publicKey, tohashBytes, dsResult.signature);
|
|
35
35
|
assert.equal(verify, true);
|
|
36
36
|
});
|
|
@@ -42,8 +42,52 @@ describe("Digital Signature", () => {
|
|
|
42
42
|
const encoder = new TextEncoder();
|
|
43
43
|
const tohashBytes: Array<number> = Array.from(encoder.encode(tohashed));
|
|
44
44
|
const badBytes: Array<number> = Array.from(encoder.encode(notOriginal));
|
|
45
|
-
const dsResult:
|
|
45
|
+
const dsResult: RSADigitalSignatureResult = shaDsWrapper.createRsa(4096, tohashBytes);
|
|
46
46
|
const verify = shaDsWrapper.verifyRSa(dsResult.publicKey, badBytes, dsResult.signature);
|
|
47
47
|
assert.equal(verify, false);
|
|
48
48
|
});
|
|
49
|
+
|
|
50
|
+
it("SHA 512 ED25519 pass", () => {
|
|
51
|
+
const shaDsWrapper = DigitalSignatureFactory.get(DigitalSignatureType.SHA512)
|
|
52
|
+
const toHash: string = "This is my array to encrypt";
|
|
53
|
+
const encoder = new TextEncoder();
|
|
54
|
+
const toHashBytes: Array<number> = Array.from(encoder.encode(toHash));
|
|
55
|
+
const dsResult = shaDsWrapper.createED25519(toHashBytes);
|
|
56
|
+
const verify = shaDsWrapper.verifyED25519(dsResult.publicKey, toHashBytes, dsResult.signature);
|
|
57
|
+
assert.equal(verify, true);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it("SHA 512 ED25519 fails", () => {
|
|
61
|
+
const shaDsWrapper = DigitalSignatureFactory.get(DigitalSignatureType.SHA512)
|
|
62
|
+
const toHash: string = "This is my array to encrypt";
|
|
63
|
+
const notOriginal: string = "This is not a fun time";
|
|
64
|
+
const encoder = new TextEncoder();
|
|
65
|
+
const toHashBytes: Array<number> = Array.from(encoder.encode(toHash));
|
|
66
|
+
const badBytes: Array<number> = Array.from(encoder.encode(notOriginal));
|
|
67
|
+
const dsResult = shaDsWrapper.createED25519(toHashBytes);
|
|
68
|
+
const verify = shaDsWrapper.verifyED25519(dsResult.publicKey, badBytes, dsResult.signature);
|
|
69
|
+
assert.equal(verify, false);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it("SHA 256 ED25519 pass", () => {
|
|
73
|
+
const shaDsWrapper = DigitalSignatureFactory.get(DigitalSignatureType.SHA256)
|
|
74
|
+
const toHash: string = "This is my array to encrypt";
|
|
75
|
+
const encoder = new TextEncoder();
|
|
76
|
+
const toHashBytes: Array<number> = Array.from(encoder.encode(toHash));
|
|
77
|
+
const dsResult = shaDsWrapper.createED25519(toHashBytes);
|
|
78
|
+
const verify = shaDsWrapper.verifyED25519(dsResult.publicKey, toHashBytes, dsResult.signature);
|
|
79
|
+
assert.equal(verify, true);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it("SHA 256 ED25519 fails", () => {
|
|
83
|
+
const shaDsWrapper = DigitalSignatureFactory.get(DigitalSignatureType.SHA256)
|
|
84
|
+
const toHash: string = "This is my array to encrypt";
|
|
85
|
+
const notOriginal: string = "This is not a fun time";
|
|
86
|
+
const encoder = new TextEncoder();
|
|
87
|
+
const toHashBytes: Array<number> = Array.from(encoder.encode(toHash));
|
|
88
|
+
const badBytes: Array<number> = Array.from(encoder.encode(notOriginal));
|
|
89
|
+
const dsResult = shaDsWrapper.createED25519(toHashBytes);
|
|
90
|
+
const verify = shaDsWrapper.verifyED25519(dsResult.publicKey, badBytes, dsResult.signature);
|
|
91
|
+
assert.equal(verify, false);
|
|
92
|
+
});
|
|
49
93
|
});
|
package/src-ts/global.d.ts
DELETED