openssl-apple/OpenSSL-for-iOS/FSOpenSSL.m

106 lines
3.2 KiB
Mathematica
Raw Normal View History

2013-03-16 20:01:07 +00:00
//
// FSOpenSSL.m
// OpenSSL-for-iOS
//
// Created by Felix Schulze on 16.03.2013.
// Copyright 2013 Felix Schulze. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#import "FSOpenSSL.h"
#include <openssl/md5.h>
#include <openssl/sha.h>
2013-03-16 20:15:30 +00:00
#import <openssl/evp.h>
2013-03-16 20:01:07 +00:00
@implementation FSOpenSSL
+ (NSString *)md5FromString:(NSString *)string {
unsigned char *inStrg = (unsigned char *) [[string dataUsingEncoding:NSASCIIStringEncoding] bytes];
unsigned long lngth = [string length];
unsigned char result[MD5_DIGEST_LENGTH];
NSMutableString *outStrg = [NSMutableString string];
MD5(inStrg, lngth, result);
unsigned int i;
for (i = 0; i < MD5_DIGEST_LENGTH; i++) {
[outStrg appendFormat:@"%02x", result[i]];
}
return [outStrg copy];
}
+ (NSString *)sha256FromString:(NSString *)string {
unsigned char *inStrg = (unsigned char *) [[string dataUsingEncoding:NSASCIIStringEncoding] bytes];
unsigned long lngth = [string length];
unsigned char result[SHA256_DIGEST_LENGTH];
NSMutableString *outStrg = [NSMutableString string];
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, inStrg, lngth);
SHA256_Final(result, &sha256);
unsigned int i;
for (i = 0; i < SHA256_DIGEST_LENGTH; i++) {
[outStrg appendFormat:@"%02x", result[i]];
}
return [outStrg copy];
}
2013-03-16 20:15:30 +00:00
+ (NSString *)base64FromString:(NSString *)string encodeWithNewlines:(BOOL)encodeWithNewlines {
BIO *mem = BIO_new(BIO_s_mem());
BIO *b64 = BIO_new(BIO_f_base64());
if (!encodeWithNewlines) {
BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
}
mem = BIO_push(b64, mem);
NSData *stringData = [string dataUsingEncoding:NSUTF8StringEncoding];
NSUInteger length = stringData.length;
void *buffer = (void *) [stringData bytes];
2015-06-15 14:58:39 +00:00
int bufferSize = (int)MIN(length, INT_MAX);
2013-03-16 20:15:30 +00:00
NSUInteger count = 0;
BOOL error = NO;
// Encode the data
while (!error && count < length) {
int result = BIO_write(mem, buffer, bufferSize);
if (result <= 0) {
error = YES;
}
else {
count += result;
buffer = (void *) [stringData bytes] + count;
2015-06-15 14:58:39 +00:00
bufferSize = (int)MIN((length - count), INT_MAX);
2013-03-16 20:15:30 +00:00
}
}
int flush_result = BIO_flush(mem);
if (flush_result != 1) {
return nil;
}
char *base64Pointer;
NSUInteger base64Length = (NSUInteger) BIO_get_mem_data(mem, &base64Pointer);
NSData *base64data = [NSData dataWithBytesNoCopy:base64Pointer length:base64Length freeWhenDone:NO];
NSString *base64String = [[NSString alloc] initWithData:base64data encoding:NSUTF8StringEncoding];
BIO_free_all(mem);
return base64String;
}
2013-03-16 20:01:07 +00:00
@end