From 1b64fe78cdc894da4a1e57e536c3623c207f274d Mon Sep 17 00:00:00 2001 From: ulvesked Date: Thu, 18 Apr 2019 09:12:20 +0200 Subject: [PATCH] Bump version --- .gitignore | 1 + demo/app/App_Resources/iOS/build.xcconfig | 3 +- demo/package.json | 8 ++--- src/index.d.ts | 6 ++-- src/package.json | 4 +-- src/platforms/ios/Podfile | 10 ++---- src/rsa.android.ts | 13 ++++++-- src/rsa.ios.ts | 40 ++++++++++++++++------- 8 files changed, 54 insertions(+), 31 deletions(-) diff --git a/.gitignore b/.gitignore index f2ad902..af06b60 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ publish/src publish/package demo/report/report.html demo/report/stats.json +typings \ No newline at end of file diff --git a/demo/app/App_Resources/iOS/build.xcconfig b/demo/app/App_Resources/iOS/build.xcconfig index 35c8f29..b8edfc1 100644 --- a/demo/app/App_Resources/iOS/build.xcconfig +++ b/demo/app/App_Resources/iOS/build.xcconfig @@ -3,4 +3,5 @@ // CODE_SIGN_IDENTITY = iPhone Distribution ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; -//TNS_TYPESCRIPT_DECLARATIONS_PATH = $(SRCROOT)/../typescript-declarations \ No newline at end of file +//TNS_TYPESCRIPT_DECLARATIONS_PATH = $(SRCROOT)/../typescript-declarations +IPHONEOS_DEPLOYMENT_TARGET = 10.0 \ No newline at end of file diff --git a/demo/package.json b/demo/package.json index cbcecb9..de8b00a 100644 --- a/demo/package.json +++ b/demo/package.json @@ -1,11 +1,11 @@ { "nativescript": { "id": "org.nativescript.demo", - "tns-ios": { - "version": "4.2.0" - }, "tns-android": { "version": "4.2.0" + }, + "tns-ios": { + "version": "5.2.0" } }, "dependencies": { @@ -30,4 +30,4 @@ "build.plugin": "cd ../src && npm run build", "ci.tslint": "npm i && tslint --config '../tslint.json' 'app/**/*.ts' --exclude '**/node_modules/**'" } -} \ No newline at end of file +} diff --git a/src/index.d.ts b/src/index.d.ts index b7ac899..4590f82 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -11,8 +11,10 @@ export declare class Rsa { removeKeyFromKeychain(tag: string): void; loadKey(tag: string): RsaKey; generateKey(tag: string, keySize: number, permanent?: boolean): RsaKey; - sign(data: string, key: RsaKey, alg: RsaHashAlgorithm): string; - verify(signature: string, data: string, key: RsaKey, alg: RsaHashAlgorithm): boolean; + sign(data: string, key: RsaKey, alg: RsaHashAlgorithm): ArrayBuffer + sign(data: string, key: RsaKey, alg: RsaHashAlgorithm, returnAsBase64: false): ArrayBuffer; + sign(data: string, key: RsaKey, alg: RsaHashAlgorithm, returnAsBase64: true): string; + verify(signature: string | ArrayBuffer, data: string, key: RsaKey, alg: RsaHashAlgorithm): boolean; } export declare class RsaKey { constructor(data: any); diff --git a/src/package.json b/src/package.json index bdcc899..0ee6e46 100644 --- a/src/package.json +++ b/src/package.json @@ -1,6 +1,6 @@ { "name": "nativescript-rsa", - "version": "1.0.0", + "version": "1.0.1-beta.0", "description": "Utilities for managing RSA keys in PEM format ", "main": "rsa", "typings": "index.d.ts", @@ -40,7 +40,7 @@ "bugs": { "url": "https://github.com/ulvesked/nativescript-rsa/issues" }, - "license": "Apache-2.0", + "license": "MIT", "homepage": "https://github.com/ulvesked/nativescript-rsa", "readmeFilename": "README.md", "devDependencies": { diff --git a/src/platforms/ios/Podfile b/src/platforms/ios/Podfile index c91e10e..f1a980c 100644 --- a/src/platforms/ios/Podfile +++ b/src/platforms/ios/Podfile @@ -1,8 +1,2 @@ -pod 'RSAKeyUtils', :git => 'https://github.com/ulvesked/RSAKeyUtils.git' -post_install do |installer| - installer.pods_project.targets.each do |target| - target.build_configurations.each do |config| - config.build_settings['SWIFT_VERSION'] = '3.0' - end - end - end \ No newline at end of file +platform :ios, '10.0' +pod 'RsaHelper', :git => 'https://github.com/ulvesked/RsaHelper.git' \ No newline at end of file diff --git a/src/rsa.android.ts b/src/rsa.android.ts index 1ac085d..35be293 100644 --- a/src/rsa.android.ts +++ b/src/rsa.android.ts @@ -68,13 +68,22 @@ export class Rsa { return new RsaKey(keyPair); } - sign(data: string, key: RsaKey, alg: RsaHashAlgorithm): string { + + sign(data: string, key: RsaKey, alg: RsaHashAlgorithm): ArrayBuffer + sign(data: string, key: RsaKey, alg: RsaHashAlgorithm, returnAsBase64: false): ArrayBuffer; + sign(data: string, key: RsaKey, alg: RsaHashAlgorithm, returnAsBase64: true): string; + sign(data: string, key: RsaKey, alg: RsaHashAlgorithm, returnAsBase64?: boolean): ArrayBuffer | string { const signEngine = Signature.getInstance(getProviderName(alg)); let privateKey = key.valueOf().getPrivate(); signEngine.initSign(privateKey); signEngine.update(stringToByteArray(data)); let sign = signEngine.sign(); - return android.util.Base64.encodeToString(sign, android.util.Base64.NO_WRAP); + if (returnAsBase64) { + return android.util.Base64.encodeToString(sign, android.util.Base64.NO_WRAP); + } + else { + return new Uint8Array(sign).buffer; + } } verify(signature: string, data: string, key: RsaKey, alg: RsaHashAlgorithm): boolean { const signEngine = Signature.getInstance(getProviderName(alg)); diff --git a/src/rsa.ios.ts b/src/rsa.ios.ts index 9f4b465..59c1bd6 100644 --- a/src/rsa.ios.ts +++ b/src/rsa.ios.ts @@ -1,4 +1,4 @@ -/// +/// import { stripPEMHeader } from "./helper"; @@ -35,7 +35,7 @@ export class Rsa { importPublicKey(tag: string, key: string) { try { - let pubKey = RSAKeyUtils.importPublicKeyFromPEMTagName(stripPEMHeader(key), tag); + let pubKey = RsaHelper.importPublicKeyFromPEMTagName(stripPEMHeader(key), tag); return new RsaKey(pubKey); } catch (err) { @@ -45,7 +45,7 @@ export class Rsa { } importPrivateKey(tag: string, key: string) { try { - let privKey = RSAKeyUtils.importPrivateKeyFromPEMTagName(stripPEMHeader(key), tag); + let privKey = RsaHelper.importPrivateKeyFromPEMTagName(stripPEMHeader(key), tag); return new RsaKey(privKey); } catch (err) { @@ -55,7 +55,7 @@ export class Rsa { } removeKeyFromKeychain(tag: string) { try { - RSAKeyUtils.removeKeyFromKeychain(tag); + RsaHelper.removeKeyFromKeychain(tag); } catch (err) { console.warn("Rsa.removeKeyFromKeychain failed with error: " + err); @@ -132,12 +132,16 @@ export class Rsa { } - sign(data: string, key: RsaKey, alg: RsaHashAlgorithm) { + sign(data: string, key: RsaKey, alg: RsaHashAlgorithm): ArrayBuffer + sign(data: string, key: RsaKey, alg: RsaHashAlgorithm, returnAsBase64: false): ArrayBuffer; + sign(data: string, key: RsaKey, alg: RsaHashAlgorithm, returnAsBase64: true): string; + sign(data: string, key: RsaKey, alg: RsaHashAlgorithm, returnAsBase64?: boolean): ArrayBuffer | string { let err = new interop.Reference(); try { let nsData = stringToNSData(data); let signature = SecKeyCreateSignature(key.valueOf(), alg, nsData, err); - let result = signature.base64EncodedStringWithOptions(0); + // let result = interop.bufferFromData(signature); + // let result = signature.base64EncodedStringWithOptions(0); // if (nsData) { // CFRelease(nsData); // } @@ -148,25 +152,37 @@ export class Rsa { // CFRelease(err); // } if (err && err.value) { - console.warn('Rsa.verify failed with error ' + err); + console.warn('Rsa.sign failed with error ' + err); return null; } - return result; + if (returnAsBase64) { + return signature.base64EncodedStringWithOptions(0); + } + else { + return interop.bufferFromData(signature); + } } catch (err) { console.warn('Rsa.sign failed with error ' + err); return null; } } - verify(signature: string, data: string, key: RsaKey, alg: RsaHashAlgorithm) { + verify(signature: string | ArrayBuffer, data: string, key: RsaKey, alg: RsaHashAlgorithm) { try { let err = new interop.Reference(); console.log(signature, data, key, alg); - let signatureBytes = NSData.alloc().initWithBase64Encoding(signature); + let signatureBytes: NSData | ArrayBuffer; + if (typeof(signature) == 'string') { + signatureBytes = NSData.alloc().initWithBase64Encoding(signature); + } + else { + signatureBytes = signature; + } + let nsData = stringToNSData(data); let pubKey = key.valueOf(); - let result = SecKeyVerifySignature(pubKey, alg, nsData, signatureBytes, err); + let result = SecKeyVerifySignature(pubKey, alg, nsData, signatureBytes, err); // if (nsData) { // CFRelease(nsData); // } @@ -220,7 +236,7 @@ export class RsaKey { console.log("ERR", err.value.localizedDescription); throw err.value.localizedDescription; } - return RSAKeyUtils.exportPublicKeyToPEM(pubKeyRef); + return RsaHelper.exportPublicKeyToPEM(pubKeyRef); } catch (err) { console.warn('RsaKey.getPublicKey failed with error ' + err);