Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

improve SecureMessage sign/verify examples for iOS #467

Merged
merged 2 commits into from
May 7, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 24 additions & 34 deletions docs/examples/objc/iOS-Carthage/ThemisTest/AppDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -282,56 +282,46 @@ - (void)runExampleSecureMessageEncryptionDecryption {
- (void)runExampleSecureMessageSignVerify {
NSLog(@"----------------- %s -----------------", sel_getName(_cmd));

// ---------- signing

// base64 encoded keys:
// client private key
// server public key
NSString *serverPublicKeyString = @"VUVDMgAAAC2ELbj5Aue5xjiJWW3P2KNrBX+HkaeJAb+Z4MrK0cWZlAfpBUql";
NSString *clientPrivateKeyString = @"UkVDMgAAAC13PCVZAKOczZXUpvkhsC+xvwWnv3CLmlG0Wzy8ZBMnT+2yx/dg";

NSData *serverPublicKey = [[NSData alloc] initWithBase64EncodedString:serverPublicKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSData *clientPrivateKey = [[NSData alloc] initWithBase64EncodedString:clientPrivateKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];

// initialize encrypter
TSMessage *encrypter = [[TSMessage alloc] initInSignVerifyModeWithPrivateKey:clientPrivateKey peerPublicKey:serverPublicKey];
// private key
// public key

NSString *publicKeyString = @"VUVDMgAAAC2ELbj5Aue5xjiJWW3P2KNrBX+HkaeJAb+Z4MrK0cWZlAfpBUql";
NSString *privateKeyString = @"UkVDMgAAAC1FsVa6AMGljYqtNWQ+7r4RjXTabLZxZ/14EXmi6ec2e1vrCmyR";

NSData *publicKey = [[NSData alloc] initWithBase64EncodedString:publicKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSData *privateKey = [[NSData alloc] initWithBase64EncodedString:privateKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];


// ---------- signing

// initialize signer, use private key
TSMessage *signer = [[TSMessage alloc] initInSignVerifyModeWithPrivateKey:privateKey peerPublicKey:nil];

NSString *message = @"- Knock, knock.\n- Who’s there?\n*very long pause...*\n- Java.";

NSError *themisError;
NSData *encryptedMessage = [encrypter wrapData:[message dataUsingEncoding:NSUTF8StringEncoding]
error:&themisError];
NSData *signedMessage = [signer wrapData:[message dataUsingEncoding:NSUTF8StringEncoding]
error:&themisError];
if (themisError) {
NSLog(@"%s Error occurred while encrypting %@", sel_getName(_cmd), themisError);
NSLog(@"%s Error occurred while signing %@", sel_getName(_cmd), themisError);
return;
}
NSLog(@"%@", encryptedMessage);

// -------- verification

// base64 encoded keys:
// server private key
// client public key
NSString *serverPrivateKeyString = @"UkVDMgAAAC1FsVa6AMGljYqtNWQ+7r4RjXTabLZxZ/14EXmi6ec2e1vrCmyR";
NSString *clientPublicKeyString = @"VUVDMgAAAC1SsL32Axjosnf2XXUwm/4WxPlZauQ+v+0eOOjpwMN/EO+Huh5d";

NSData *serverPrivateKey = [[NSData alloc] initWithBase64EncodedString:serverPrivateKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSData *clientPublicKey = [[NSData alloc] initWithBase64EncodedString:clientPublicKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];

// initialize decrypter
TSMessage *decrypter = [[TSMessage alloc] initInSignVerifyModeWithPrivateKey:serverPrivateKey peerPublicKey:clientPublicKey];
// initialize verifier, use public key
TSMessage *verifier = [[TSMessage alloc] initInSignVerifyModeWithPrivateKey:nil peerPublicKey:publicKey];

NSData *decryptedMessage = [decrypter unwrapData:encryptedMessage error:&themisError];
NSData *verifiedMessage = [verifier unwrapData:signedMessage error:&themisError];
if (themisError) {
NSLog(@"%s Error occurred while decrypting %@", sel_getName(_cmd), themisError);
NSLog(@"%s Error occurred while verifying %@", sel_getName(_cmd), themisError);
return;
}

NSString *resultString = [[NSString alloc] initWithData:decryptedMessage encoding:NSUTF8StringEncoding];
NSString *resultString = [[NSString alloc] initWithData:verifiedMessage encoding:NSUTF8StringEncoding];
NSLog(@"%@", resultString);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -278,60 +278,50 @@ - (void)runExampleSecureMessageEncryptionDecryption {
- (void)runExampleSecureMessageSignVerify {
NSLog(@"----------------- %s -----------------", sel_getName(_cmd));

// ---------- signing

// base64 encoded keys:
// client private key
// server public key
NSString * serverPublicKeyString = @"VUVDMgAAAC2ELbj5Aue5xjiJWW3P2KNrBX+HkaeJAb+Z4MrK0cWZlAfpBUql";
NSString * clientPrivateKeyString = @"UkVDMgAAAC13PCVZAKOczZXUpvkhsC+xvwWnv3CLmlG0Wzy8ZBMnT+2yx/dg";

NSData * serverPublicKey = [[NSData alloc] initWithBase64EncodedString:serverPublicKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSData * clientPrivateKey = [[NSData alloc] initWithBase64EncodedString:clientPrivateKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];

// initialize encrypter
TSMessage * encrypter = [[TSMessage alloc] initInSignVerifyModeWithPrivateKey:clientPrivateKey peerPublicKey:serverPublicKey];

NSString * message = @"- Knock, knock.\n- Who’s there?\n*very long pause...*\n- Java.";

NSError * themisError;
NSData * encryptedMessage = [encrypter wrapData:[message dataUsingEncoding:NSUTF8StringEncoding]
error:&themisError];
// private key
// public key

NSString *publicKeyString = @"VUVDMgAAAC2ELbj5Aue5xjiJWW3P2KNrBX+HkaeJAb+Z4MrK0cWZlAfpBUql";
NSString *privateKeyString = @"UkVDMgAAAC1FsVa6AMGljYqtNWQ+7r4RjXTabLZxZ/14EXmi6ec2e1vrCmyR";

NSData *publicKey = [[NSData alloc] initWithBase64EncodedString:publicKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSData *privateKey = [[NSData alloc] initWithBase64EncodedString:privateKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];


// ---------- signing

// initialize signer, use private key
TSMessage *signer = [[TSMessage alloc] initInSignVerifyModeWithPrivateKey:privateKey peerPublicKey:nil];

NSString *message = @"- Knock, knock.\n- Who’s there?\n*very long pause...*\n- Java.";

NSError *themisError;
NSData *signedMessage = [signer wrapData:[message dataUsingEncoding:NSUTF8StringEncoding]
error:&themisError];
if (themisError) {
NSLog(@"%s Error occurred while encrypting %@", sel_getName(_cmd), themisError);
NSLog(@"%s Error occurred while signing %@", sel_getName(_cmd), themisError);
return;
}
NSLog(@"%@", encryptedMessage);



// -------- verification

// base64 encoded keys:
// server private key
// client public key
NSString * serverPrivateKeyString = @"UkVDMgAAAC1FsVa6AMGljYqtNWQ+7r4RjXTabLZxZ/14EXmi6ec2e1vrCmyR";
NSString * clientPublicKeyString = @"VUVDMgAAAC1SsL32Axjosnf2XXUwm/4WxPlZauQ+v+0eOOjpwMN/EO+Huh5d";

NSData * serverPrivateKey = [[NSData alloc] initWithBase64EncodedString:serverPrivateKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSData * clientPublicKey = [[NSData alloc] initWithBase64EncodedString:clientPublicKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];

// initialize decrypter
TSMessage * decrypter = [[TSMessage alloc] initInSignVerifyModeWithPrivateKey:serverPrivateKey peerPublicKey:clientPublicKey];

NSData * decryptedMessage = [decrypter unwrapData:encryptedMessage error:&themisError];

// initialize verifier, use public key
TSMessage *verifier = [[TSMessage alloc] initInSignVerifyModeWithPrivateKey:nil peerPublicKey:publicKey];

NSData *verifiedMessage = [verifier unwrapData:signedMessage error:&themisError];
if (themisError) {
NSLog(@"%s Error occurred while decrypting %@", sel_getName(_cmd), themisError);
NSLog(@"%s Error occurred while verifying %@", sel_getName(_cmd), themisError);
return;
}

NSString * resultString = [[NSString alloc] initWithData:decryptedMessage encoding:NSUTF8StringEncoding];
NSString *resultString = [[NSString alloc] initWithData:verifiedMessage encoding:NSUTF8StringEncoding];
NSLog(@"%@", resultString);
}


// Sometimes you will need to read keys from files
- (void)readingKeysFromFile {
NSLog(@"----------------- %s -----------------", sel_getName(_cmd));
Expand Down
72 changes: 31 additions & 41 deletions docs/examples/objc/macOS-Carthage/ThemisTest/AppDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -275,57 +275,47 @@ - (void)runExampleSecureMessageEncryptionDecryption {

- (void)runExampleSecureMessageSignVerify {
NSLog(@"----------------- %s -----------------", sel_getName(_cmd));

// ---------- signing


// base64 encoded keys:
// client private key
// server public key
NSString *serverPublicKeyString = @"VUVDMgAAAC2ELbj5Aue5xjiJWW3P2KNrBX+HkaeJAb+Z4MrK0cWZlAfpBUql";
NSString *clientPrivateKeyString = @"UkVDMgAAAC13PCVZAKOczZXUpvkhsC+xvwWnv3CLmlG0Wzy8ZBMnT+2yx/dg";

NSData *serverPublicKey = [[NSData alloc] initWithBase64EncodedString:serverPublicKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSData *clientPrivateKey = [[NSData alloc] initWithBase64EncodedString:clientPrivateKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];

// initialize encrypter
TSMessage *encrypter = [[TSMessage alloc] initInSignVerifyModeWithPrivateKey:clientPrivateKey peerPublicKey:serverPublicKey];

// private key
// public key

NSString *publicKeyString = @"VUVDMgAAAC2ELbj5Aue5xjiJWW3P2KNrBX+HkaeJAb+Z4MrK0cWZlAfpBUql";
NSString *privateKeyString = @"UkVDMgAAAC1FsVa6AMGljYqtNWQ+7r4RjXTabLZxZ/14EXmi6ec2e1vrCmyR";

NSData *publicKey = [[NSData alloc] initWithBase64EncodedString:publicKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSData *privateKey = [[NSData alloc] initWithBase64EncodedString:privateKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];


// ---------- signing

// initialize signer, use private key
TSMessage *signer = [[TSMessage alloc] initInSignVerifyModeWithPrivateKey:privateKey peerPublicKey:nil];

NSString *message = @"- Knock, knock.\n- Who’s there?\n*very long pause...*\n- Java.";

NSError *themisError;
NSData *encryptedMessage = [encrypter wrapData:[message dataUsingEncoding:NSUTF8StringEncoding]
error:&themisError];
NSData *signedMessage = [signer wrapData:[message dataUsingEncoding:NSUTF8StringEncoding]
error:&themisError];
if (themisError) {
NSLog(@"%s Error occurred while encrypting %@", sel_getName(_cmd), themisError);
NSLog(@"%s Error occurred while signing %@", sel_getName(_cmd), themisError);
return;
}
NSLog(@"%@", encryptedMessage);


// -------- verification

// base64 encoded keys:
// server private key
// client public key
NSString *serverPrivateKeyString = @"UkVDMgAAAC1FsVa6AMGljYqtNWQ+7r4RjXTabLZxZ/14EXmi6ec2e1vrCmyR";
NSString *clientPublicKeyString = @"VUVDMgAAAC1SsL32Axjosnf2XXUwm/4WxPlZauQ+v+0eOOjpwMN/EO+Huh5d";

NSData *serverPrivateKey = [[NSData alloc] initWithBase64EncodedString:serverPrivateKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSData *clientPublicKey = [[NSData alloc] initWithBase64EncodedString:clientPublicKeyString
options:NSDataBase64DecodingIgnoreUnknownCharacters];

// initialize decrypter
TSMessage *decrypter = [[TSMessage alloc] initInSignVerifyModeWithPrivateKey:serverPrivateKey peerPublicKey:clientPublicKey];

NSData *decryptedMessage = [decrypter unwrapData:encryptedMessage error:&themisError];

// initialize verifier, use public key
TSMessage *verifier = [[TSMessage alloc] initInSignVerifyModeWithPrivateKey:nil peerPublicKey:publicKey];

NSData *verifiedMessage = [verifier unwrapData:signedMessage error:&themisError];
if (themisError) {
NSLog(@"%s Error occurred while decrypting %@", sel_getName(_cmd), themisError);
NSLog(@"%s Error occurred while verifying %@", sel_getName(_cmd), themisError);
return;
}

NSString *resultString = [[NSString alloc] initWithData:decryptedMessage encoding:NSUTF8StringEncoding];
NSString *resultString = [[NSString alloc] initWithData:verifiedMessage encoding:NSUTF8StringEncoding];
NSLog(@"%@", resultString);
}

Expand Down
2 changes: 1 addition & 1 deletion docs/examples/swift/iOS-Carthage/Cartfile.resolved
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
github "cossacklabs/themis" "0.11.0"
github "cossacklabs/themis" "0.11.1"
github "krzyzanowskim/OpenSSL" "1.0.2.17"
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = com.cossacklabs.themis.ThemisTest;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.2;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
Expand All @@ -377,7 +377,7 @@
);
PRODUCT_BUNDLE_IDENTIFIER = com.cossacklabs.themis.ThemisTest;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.2;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
Expand Down
53 changes: 22 additions & 31 deletions docs/examples/swift/iOS-Carthage/ThemisTest/AppDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -265,60 +265,51 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
func runExampleSecureMessageSignVerify() {
print("----------------------------------", #function)

// ---------- signing ----------------

// base64 encoded keys:
// client private key
// server public key
// private key
// public key

let serverPublicKeyString: String = "VUVDMgAAAC2ELbj5Aue5xjiJWW3P2KNrBX+HkaeJAb+Z4MrK0cWZlAfpBUql"
let clientPrivateKeyString: String = "UkVDMgAAAC13PCVZAKOczZXUpvkhsC+xvwWnv3CLmlG0Wzy8ZBMnT+2yx/dg"
let publicKeyString: String = "VUVDMgAAAC2ELbj5Aue5xjiJWW3P2KNrBX+HkaeJAb+Z4MrK0cWZlAfpBUql"
let privateKeyString: String = "UkVDMgAAAC1FsVa6AMGljYqtNWQ+7r4RjXTabLZxZ/14EXmi6ec2e1vrCmyR"

guard let serverPublicKey: Data = Data(base64Encoded: serverPublicKeyString,
guard let publicKey: Data = Data(base64Encoded: publicKeyString,
options: .ignoreUnknownCharacters),
let clientPrivateKey: Data = Data(base64Encoded: clientPrivateKeyString,
let privateKey: Data = Data(base64Encoded: privateKeyString,
options: .ignoreUnknownCharacters) else {
print("Error occurred during base64 encoding", #function)
return
}

let encrypter: TSMessage = TSMessage.init(inSignVerifyModeWithPrivateKey: clientPrivateKey,
peerPublicKey: serverPublicKey)!
// ---------- signing ----------------
// use private key

let signer: TSMessage = TSMessage.init(inSignVerifyModeWithPrivateKey: privateKey,
peerPublicKey: nil)!

let message: String = "I had a problem so I though to use Java. Now I have a ProblemFactory."

var encryptedMessage: Data = Data()
var signedMessage: Data = Data()
do {
encryptedMessage = try encrypter.wrap(message.data(using: .utf8))
print("encryptedMessage = \(encryptedMessage)")
signedMessage = try signer.wrap(message.data(using: .utf8))
print("signedMessage = \(signedMessage)")

} catch let error as NSError {
print("Error occurred while encrypting \(error)", #function)
print("Error occurred while signing \(error)", #function)
return
}

// ---------- verification ----------------
let serverPrivateKeyString: String = "UkVDMgAAAC1FsVa6AMGljYqtNWQ+7r4RjXTabLZxZ/14EXmi6ec2e1vrCmyR"
let clientPublicKeyString: String = "VUVDMgAAAC1SsL32Axjosnf2XXUwm/4WxPlZauQ+v+0eOOjpwMN/EO+Huh5d"

guard let serverPrivateKey: Data = Data(base64Encoded: serverPrivateKeyString,
options: .ignoreUnknownCharacters),
let clientPublicKey: Data = Data(base64Encoded: clientPublicKeyString,
options: .ignoreUnknownCharacters) else {
print("Error occurred during base64 encoding", #function)
return
}

let decrypter: TSMessage = TSMessage.init(inSignVerifyModeWithPrivateKey: serverPrivateKey,
peerPublicKey: clientPublicKey)!
// use public key
let verifier = TSMessage.init(inSignVerifyModeWithPrivateKey: nil,
peerPublicKey: publicKey)!

do {
let decryptedMessage: Data = try decrypter.unwrapData(encryptedMessage)
let resultString: String = String(data: decryptedMessage, encoding: .utf8)!
print("decryptedMessage->\n\(resultString)")
let verifiedMessage: Data = try verifier.unwrapData(signedMessage)
let resultString: String = String(data: verifiedMessage, encoding: .utf8)!
print("verifiedMessage ->\n\(resultString)")

} catch let error as NSError {
print("Error occurred while decrypting \(error)", #function)
print("Error occurred while verifing \(error)", #function)
return
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
Loading