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);