-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathCryptoUtil.h
More file actions
executable file
·152 lines (123 loc) · 5.24 KB
/
CryptoUtil.h
File metadata and controls
executable file
·152 lines (123 loc) · 5.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
//
// CryptoUtil.h
// iPhoneLib,
// Helper Functions and Classes for Ordinary Application Development on iPhone
//
// Created by meinside on 10. 01. 16.
//
// last update: 10.07.21.
//
#pragma once
#import <Foundation/Foundation.h>
//needs: Security.framework
@interface CryptoUtil : NSObject {
}
+ (BOOL)generateRSAKeyWithKeySizeInBits:(int)keyBits publicKeyTag:(NSString*)publicTag privateKeyTag:(NSString*)privateTag;
/*
* generate a public key in ASN.1 format from given modulus and exponent
*
* reference: https://devforums.apple.com/message/21365
resulting byte array for example:
//64 bytes
{
0x30, //SEQUENCE tag: fixed element
0x47, //total length
0x02, //INTEGER tag: fixed element
0x40, //modulus length
//modulus array starts here
0x78, 0x74, 0xE4, 0xD6, 0xF2, 0x99, 0xDD, 0x4C,
0x3B, 0xFB, 0xE1, 0x15, 0x92, 0x5A, 0x65, 0x40,
0xF3, 0x3F, 0xAB, 0xEF, 0x78, 0x4B, 0xF5, 0xCA,
0x97, 0x69, 0xAF, 0xB5, 0xFF, 0xC1, 0x0C, 0xE0,
0x39, 0x69, 0x68, 0x01, 0x32, 0x3A, 0xF6, 0xB8,
0xCA, 0xC4, 0xC6, 0x7F, 0xA2, 0x4A, 0x21, 0xB2,
0xC1, 0xE7, 0x8C, 0x7B, 0x3B, 0x64, 0x77, 0x0D,
0xF6, 0xE1, 0x93, 0x04, 0xC0, 0xB9, 0x5D, 0x83,
//modulus array ends here
0x02, //INTEGER tag: fixed element
0x03, //exponent length
0x01, 0x00, 0x01, //exponent array
};
//128 bytes
{
0x30, //SEQUENCE tag: fixed element
0x81, 137, //total length (if length >= 0x80, it should be represented as 'positive' by appending 0x81 ahead of it)
0x02, //INTEGER tag: fixed element
0x81, 129, //modulus length (same as above)
//modulus array starts here
0x00, //if first byte of modulus array >= 0x80, it should be represented as 'positive' by inserting 0x00 here)
0x9F, 0x8C, 0x20, 0x2F, 0xDB, 0xF9, 0xE8, 0x02,
0x59, 0x0B, 0xC6, 0x36, 0x56, 0x34, 0x7C, 0x4F,
0x4F, 0x03, 0x7C, 0x2F, 0x06, 0x0B, 0x3D, 0xC5,
0x53, 0x7C, 0x92, 0xD7, 0x2B, 0xF9, 0xCB, 0xBF,
0xB2, 0x17, 0xEE, 0x1C, 0xA1, 0x19, 0x0D, 0xC6,
0xC9, 0xF7, 0xF5, 0x85, 0xC7, 0xB3, 0xBE, 0x8D,
0x28, 0x2E, 0x8E, 0xC9, 0x80, 0x39, 0x60, 0x3B,
0x31, 0xFE, 0x1D, 0xAB, 0x28, 0x55, 0x01, 0x0B,
0x43, 0xD6, 0x55, 0xAE, 0xB1, 0x32, 0xB1, 0xE3,
0x1A, 0x8A, 0xD1, 0xC5, 0x4A, 0x17, 0x42, 0xC3,
0x07, 0x16, 0xF1, 0x00, 0xB1, 0x10, 0x00, 0x3C,
0x6D, 0x68, 0xCB, 0x95, 0x3E, 0x94, 0x12, 0xBD,
0x41, 0x03, 0xDA, 0x11, 0x1B, 0xE6, 0xD5, 0x0A,
0xF3, 0x6D, 0xA8, 0x0D, 0xAF, 0x69, 0xB4, 0xC6,
0x07, 0x0C, 0xC6, 0x62, 0x1C, 0x87, 0xB0, 0x05,
0x60, 0xFD, 0xDA, 0x6D, 0xD2, 0x43, 0x6F, 0x41,
//modulus array ends here
0x02, //INTEGER tag: fixed element
0x03, //exponent length
0x01, 0x00, 0x01, //exponent array
};
//256 bytes
{
0x30, //SEQUENCE tag: fixed element
0x82, 0x01, 0x0A, //total length (if length >= 0x0100, it should be represented as 'positive' by appending 0x82 ahead of it)
0x02, //INTEGER tag: fixed element
0x82, 0x01, 0x01, //modulus length (same as above)
//modulus array starts here
0x00, //if first byte of modulus array >= 0x80, it should be represented as 'positive' by inserting 0x00 here)
0xA3, 0xDD, 0x97, 0xC9, 0x15, 0x3B, 0xF9, 0xE4,
0xE7, 0x1C, 0xE2, 0x82, 0x10, 0xD8, 0x81, 0xD5,
0x7F, 0x04, 0x2B, 0xE4, 0xE3, 0x2B, 0xF3, 0x71,
0x67, 0x1F, 0xC9, 0xC8, 0x55, 0x43, 0xCF, 0x32,
0x66, 0x81, 0x45, 0xF1, 0xBC, 0xCE, 0x90, 0x54,
0x8D, 0xD9, 0x79, 0xD6, 0xB1, 0x45, 0xF7, 0xD5,
0xE5, 0xA3, 0x21, 0xAC, 0xCC, 0x14, 0xE0, 0x54,
0xB3, 0x89, 0xE5, 0x6D, 0xBD, 0x4F, 0x30, 0xDB,
0xE2, 0x0D, 0x6E, 0x97, 0x64, 0x33, 0x60, 0x63,
0x81, 0x7E, 0x36, 0xFC, 0x3A, 0x85, 0xD2, 0xAF,
0xD5, 0x3A, 0xA8, 0xE0, 0x36, 0x27, 0xFA, 0x4C,
0x75, 0xEF, 0xC0, 0xC2, 0x47, 0xA6, 0xC9, 0xD9,
0x8C, 0xCB, 0x92, 0x70, 0xEA, 0xF5, 0xB7, 0x68,
0x4B, 0xF5, 0x33, 0xC2, 0xDB, 0x8E, 0x2F, 0xDE,
0x91, 0xCC, 0x75, 0x30, 0x7C, 0x75, 0x08, 0x76,
0x4D, 0xE8, 0x98, 0x6F, 0x4A, 0x61, 0x66, 0x29,
0x19, 0x38, 0x8D, 0x32, 0xC2, 0x5E, 0x6E, 0xB8,
0xE1, 0xD0, 0xE8, 0xBD, 0x39, 0xEF, 0x02, 0x76,
0x48, 0x09, 0xE1, 0xCC, 0xD6, 0xA9, 0x4A, 0x33,
0xAF, 0xC2, 0x53, 0x7C, 0x16, 0xF1, 0xC5, 0x96,
0x1B, 0xB9, 0x9B, 0x23, 0x86, 0x78, 0xC3, 0x5D,
0x2A, 0x43, 0xFF, 0x57, 0x64, 0x55, 0x05, 0xC9,
0x2C, 0x21, 0xEF, 0x99, 0x74, 0x4F, 0x6B, 0x8D,
0x13, 0x65, 0xD3, 0x1B, 0x63, 0x24, 0xA7, 0x84,
0x0F, 0xCA, 0x59, 0x06, 0xE4, 0x37, 0x28, 0x1B,
0xA1, 0xA9, 0xC4, 0x25, 0x69, 0x03, 0x48, 0x8B,
0x2B, 0x78, 0x4E, 0x6A, 0xB3, 0xE1, 0x4A, 0xC4,
0x64, 0xF6, 0x2C, 0x2D, 0x5D, 0x0D, 0x6C, 0x46,
0xC8, 0xC3, 0x4D, 0x68, 0x03, 0x7A, 0x67, 0xFC,
0xBE, 0x0F, 0xBB, 0x3C, 0x06, 0x20, 0xE3, 0xC4,
0x90, 0x62, 0x9F, 0x22, 0xF2, 0xD4, 0x7F, 0xE3,
0x6A, 0x38, 0x7B, 0x6E, 0xF7, 0x58, 0x80, 0xAF,
//modulus array ends here
0x02, //INTEGER tag: fixed element
0x03, //exponent length
0x01, 0x00, 0x01, //exponent array
};
*/
+ (NSData*)generateRSAPublicKeyWithModulus:(NSData*)modulus exponent:(NSData*)exponent;
+ (BOOL)saveRSAPublicKey:(NSData*)publicKey appTag:(NSString*)appTag overwrite:(BOOL)overwrite;
+ (BOOL)updateRSAPublicKey:(NSData*)publicKey appTag:(NSString*)appTag;
+ (SecKeyRef)loadRSAPublicKeyRefWithAppTag:(NSString*)appTag;
+ (NSData*)encryptString:(NSString*)original RSAPublicKey:(SecKeyRef)publicKey padding:(SecPadding)padding;
+ (BOOL)deleteRSAPublicKeyWithAppTag:(NSString*)appTag;
+ (SecKeyRef)RSAPublicKeyRefFromBase64String:(NSString *)key withTag:(NSString *)tag;
@end