react-native-des-machine 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +272 -49
- package/android/src/main/java/com/desmachine/DesMachineModule.kt +77 -68
- package/ios/DesMachine.h +0 -6
- package/ios/DesMachine.mm +120 -83
- package/lib/module/NativeDesMachine.js.map +1 -1
- package/lib/module/index.js +149 -11
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/NativeDesMachine.d.ts +25 -3
- package/lib/typescript/src/NativeDesMachine.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +95 -5
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/package.json +27 -11
- package/src/NativeDesMachine.ts +26 -3
- package/src/index.ts +164 -13
package/ios/DesMachine.mm
CHANGED
|
@@ -20,18 +20,6 @@ static NSString *const FORMAT_HEX = @"HEX";
|
|
|
20
20
|
|
|
21
21
|
@implementation DesMachine
|
|
22
22
|
|
|
23
|
-
#pragma mark - Initialization
|
|
24
|
-
|
|
25
|
-
- (instancetype)init {
|
|
26
|
-
self = [super init];
|
|
27
|
-
if (self) {
|
|
28
|
-
_mode = MODE_ECB;
|
|
29
|
-
_padding = PADDING_PKCS7;
|
|
30
|
-
_outputFormat = FORMAT_BASE64;
|
|
31
|
-
}
|
|
32
|
-
return self;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
23
|
#pragma mark - TurboModule
|
|
36
24
|
|
|
37
25
|
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
@@ -48,93 +36,142 @@ static NSString *const FORMAT_HEX = @"HEX";
|
|
|
48
36
|
#pragma mark - NativeDesMachineSpec Methods
|
|
49
37
|
|
|
50
38
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
39
|
+
* Encrypt the provided plaintext using DES algorithm.
|
|
40
|
+
* Stateless operation - all parameters are passed with each call.
|
|
41
|
+
*
|
|
42
|
+
* @param params DesMachineParams containing:
|
|
53
43
|
* - key: NSString (required, minimum 8 characters)
|
|
54
44
|
* - mode: NSString (optional, default: ECB) - ECB, CBC, CFB, OFB, CTR
|
|
55
45
|
* - padding: NSString (optional, default: PKCS7) - PKCS7, ISO10126, ZERO, NONE
|
|
56
46
|
* - outputFormat: NSString (optional, default: BASE64) - BASE64, HEX
|
|
47
|
+
* @param text The plaintext to encrypt
|
|
48
|
+
* @return Encrypted string in the configured output format (BASE64 or HEX)
|
|
57
49
|
*/
|
|
58
|
-
- (
|
|
50
|
+
- (NSString *)encrypt:(JS::NativeDesMachine::DesMachineParams &)params
|
|
51
|
+
text:(NSString *)text {
|
|
52
|
+
// Parse parameters
|
|
59
53
|
NSString *key = params.key();
|
|
60
|
-
|
|
61
54
|
if (!key || key.length < 8) {
|
|
62
55
|
@throw [NSException exceptionWithName:@"InvalidKeyException"
|
|
63
56
|
reason:@"DES key must be at least 8 characters long"
|
|
64
57
|
userInfo:nil];
|
|
65
58
|
}
|
|
66
59
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
self.mode = (modeParam && modeParam.length > 0) ? modeParam : MODE_ECB;
|
|
74
|
-
self.padding = (paddingParam && paddingParam.length > 0) ? paddingParam : PADDING_PKCS7;
|
|
75
|
-
self.outputFormat = (outputFormatParam && outputFormatParam.length > 0) ? outputFormatParam : FORMAT_BASE64;
|
|
76
|
-
|
|
77
|
-
// Initialize secret key (DES uses 8 bytes)
|
|
78
|
-
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
|
|
79
|
-
self.secretKey = [keyData subdataWithRange:NSMakeRange(0, MIN(8, keyData.length))];
|
|
80
|
-
|
|
81
|
-
// Pad key to 8 bytes if needed
|
|
82
|
-
if (self.secretKey.length < 8) {
|
|
83
|
-
NSMutableData *paddedKey = [NSMutableData dataWithData:self.secretKey];
|
|
84
|
-
[paddedKey setLength:8];
|
|
85
|
-
self.secretKey = paddedKey;
|
|
60
|
+
NSString *iv = params.iv();
|
|
61
|
+
if (iv && iv.length != 8) {
|
|
62
|
+
@throw [NSException exceptionWithName:@"InvalidIVException"
|
|
63
|
+
reason:@"IV must be exactly 8 characters long"
|
|
64
|
+
userInfo:nil];
|
|
86
65
|
}
|
|
87
66
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
* Encrypt the provided plaintext using DES algorithm.
|
|
98
|
-
* @param text The plaintext to encrypt
|
|
99
|
-
* @return Encrypted string in the configured output format (BASE64 or HEX)
|
|
100
|
-
*/
|
|
101
|
-
- (NSString *)encrypt:(NSString *)text {
|
|
102
|
-
if (!self.secretKey) {
|
|
103
|
-
@throw [NSException exceptionWithName:@"NotInitializedException"
|
|
104
|
-
reason:@"DES not initialized. Call setMachineParams() first."
|
|
105
|
-
userInfo:nil];
|
|
67
|
+
NSString *mode = params.mode() ?: MODE_ECB;
|
|
68
|
+
NSString *padding = params.padding() ?: PADDING_PKCS7;
|
|
69
|
+
NSString *outputFormat = params.outputFormat() ?: FORMAT_BASE64;
|
|
70
|
+
|
|
71
|
+
// Prepare key and IV
|
|
72
|
+
NSData *keyData = [self prepareKey:key];
|
|
73
|
+
NSData *ivData = nil;
|
|
74
|
+
if (![mode isEqualToString:MODE_ECB]) {
|
|
75
|
+
ivData = iv ? [self prepareIV:iv] : keyData;
|
|
106
76
|
}
|
|
107
77
|
|
|
78
|
+
// Encrypt
|
|
108
79
|
NSData *inputData = [text dataUsingEncoding:NSUTF8StringEncoding];
|
|
109
|
-
NSData *paddedData = [self applyPadding:inputData];
|
|
110
|
-
NSData *encryptedData = [self performDESOperation:kCCEncrypt
|
|
80
|
+
NSData *paddedData = [self applyPadding:inputData withPadding:padding];
|
|
81
|
+
NSData *encryptedData = [self performDESOperation:kCCEncrypt
|
|
82
|
+
onData:paddedData
|
|
83
|
+
withKey:keyData
|
|
84
|
+
iv:ivData
|
|
85
|
+
mode:mode
|
|
86
|
+
padding:padding];
|
|
111
87
|
|
|
112
|
-
return [self formatOutput:encryptedData];
|
|
88
|
+
return [self formatOutput:encryptedData withFormat:outputFormat];
|
|
113
89
|
}
|
|
114
90
|
|
|
115
91
|
/**
|
|
116
92
|
* Decrypt the provided ciphertext using DES algorithm.
|
|
93
|
+
* Stateless operation - all parameters are passed with each call.
|
|
94
|
+
*
|
|
95
|
+
* @param params DesMachineParams containing:
|
|
96
|
+
* - key: NSString (required, minimum 8 characters)
|
|
97
|
+
* - mode: NSString (optional, default: ECB) - ECB, CBC, CFB, OFB, CTR
|
|
98
|
+
* - padding: NSString (optional, default: PKCS7) - PKCS7, ISO10126, ZERO, NONE
|
|
99
|
+
* - outputFormat: NSString (optional, default: BASE64) - BASE64, HEX
|
|
117
100
|
* @param text Encrypted string in the configured format (BASE64 or HEX)
|
|
118
101
|
* @return Decrypted plaintext
|
|
119
102
|
*/
|
|
120
|
-
- (NSString *)decrypt:(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
103
|
+
- (NSString *)decrypt:(JS::NativeDesMachine::DesMachineParams &)params
|
|
104
|
+
text:(NSString *)text {
|
|
105
|
+
// Parse parameters
|
|
106
|
+
NSString *key = params.key();
|
|
107
|
+
if (!key || key.length < 8) {
|
|
108
|
+
@throw [NSException exceptionWithName:@"InvalidKeyException"
|
|
109
|
+
reason:@"DES key must be at least 8 characters long"
|
|
110
|
+
userInfo:nil];
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
NSString *iv = params.iv();
|
|
114
|
+
if (iv && iv.length != 8) {
|
|
115
|
+
@throw [NSException exceptionWithName:@"InvalidIVException"
|
|
116
|
+
reason:@"IV must be exactly 8 characters long"
|
|
124
117
|
userInfo:nil];
|
|
125
118
|
}
|
|
126
119
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
120
|
+
NSString *mode = params.mode() ?: MODE_ECB;
|
|
121
|
+
NSString *padding = params.padding() ?: PADDING_PKCS7;
|
|
122
|
+
NSString *outputFormat = params.outputFormat() ?: FORMAT_BASE64;
|
|
123
|
+
|
|
124
|
+
// Prepare key and IV
|
|
125
|
+
NSData *keyData = [self prepareKey:key];
|
|
126
|
+
NSData *ivData = nil;
|
|
127
|
+
if (![mode isEqualToString:MODE_ECB]) {
|
|
128
|
+
ivData = iv ? [self prepareIV:iv] : keyData;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Decrypt
|
|
132
|
+
NSData *encryptedData = [self parseInput:text withFormat:outputFormat];
|
|
133
|
+
NSData *decryptedData = [self performDESOperation:kCCDecrypt
|
|
134
|
+
onData:encryptedData
|
|
135
|
+
withKey:keyData
|
|
136
|
+
iv:ivData
|
|
137
|
+
mode:mode
|
|
138
|
+
padding:padding];
|
|
139
|
+
NSData *unpaddedData = [self removePadding:decryptedData withPadding:padding];
|
|
130
140
|
|
|
131
141
|
return [[NSString alloc] initWithData:unpaddedData encoding:NSUTF8StringEncoding];
|
|
132
142
|
}
|
|
133
143
|
|
|
144
|
+
#pragma mark - Key and IV Preparation
|
|
145
|
+
|
|
146
|
+
- (NSData *)prepareKey:(NSString *)key {
|
|
147
|
+
NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
|
|
148
|
+
NSData *secretKey = [keyData subdataWithRange:NSMakeRange(0, MIN(8, keyData.length))];
|
|
149
|
+
|
|
150
|
+
// Pad key to 8 bytes if needed
|
|
151
|
+
if (secretKey.length < 8) {
|
|
152
|
+
NSMutableData *paddedKey = [NSMutableData dataWithData:secretKey];
|
|
153
|
+
[paddedKey setLength:8];
|
|
154
|
+
return paddedKey;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return secretKey;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
- (NSData *)prepareIV:(NSString *)iv {
|
|
161
|
+
NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
|
|
162
|
+
// IV must be exactly 8 bytes for DES
|
|
163
|
+
return [ivData subdataWithRange:NSMakeRange(0, MIN(8, ivData.length))];
|
|
164
|
+
}
|
|
165
|
+
|
|
134
166
|
#pragma mark - DES Operations
|
|
135
167
|
|
|
136
|
-
- (NSData *)performDESOperation:(CCOperation)operation
|
|
137
|
-
|
|
168
|
+
- (NSData *)performDESOperation:(CCOperation)operation
|
|
169
|
+
onData:(NSData *)data
|
|
170
|
+
withKey:(NSData *)key
|
|
171
|
+
iv:(NSData *)iv
|
|
172
|
+
mode:(NSString *)mode
|
|
173
|
+
padding:(NSString *)padding {
|
|
174
|
+
CCOptions options = [self getCCOptionsForMode:mode padding:padding];
|
|
138
175
|
|
|
139
176
|
size_t bufferSize = data.length + kCCBlockSizeDES;
|
|
140
177
|
void *buffer = malloc(bufferSize);
|
|
@@ -144,9 +181,9 @@ static NSString *const FORMAT_HEX = @"HEX";
|
|
|
144
181
|
operation,
|
|
145
182
|
kCCAlgorithmDES,
|
|
146
183
|
options,
|
|
147
|
-
|
|
184
|
+
key.bytes,
|
|
148
185
|
kCCKeySizeDES,
|
|
149
|
-
|
|
186
|
+
iv.bytes,
|
|
150
187
|
data.bytes,
|
|
151
188
|
data.length,
|
|
152
189
|
buffer,
|
|
@@ -167,16 +204,16 @@ static NSString *const FORMAT_HEX = @"HEX";
|
|
|
167
204
|
return result;
|
|
168
205
|
}
|
|
169
206
|
|
|
170
|
-
- (CCOptions)
|
|
207
|
+
- (CCOptions)getCCOptionsForMode:(NSString *)mode padding:(NSString *)padding {
|
|
171
208
|
CCOptions options = 0;
|
|
172
209
|
|
|
173
210
|
// ECB mode
|
|
174
|
-
if ([
|
|
211
|
+
if ([mode isEqualToString:MODE_ECB]) {
|
|
175
212
|
options |= kCCOptionECBMode;
|
|
176
213
|
}
|
|
177
214
|
|
|
178
215
|
// Padding
|
|
179
|
-
if ([
|
|
216
|
+
if ([padding isEqualToString:PADDING_PKCS7]) {
|
|
180
217
|
options |= kCCOptionPKCS7Padding;
|
|
181
218
|
}
|
|
182
219
|
// For other padding types, we handle manually (no padding flag = NoPadding)
|
|
@@ -186,8 +223,8 @@ static NSString *const FORMAT_HEX = @"HEX";
|
|
|
186
223
|
|
|
187
224
|
#pragma mark - Padding
|
|
188
225
|
|
|
189
|
-
- (NSData *)applyPadding:(NSData *)data {
|
|
190
|
-
if ([
|
|
226
|
+
- (NSData *)applyPadding:(NSData *)data withPadding:(NSString *)padding {
|
|
227
|
+
if ([padding isEqualToString:PADDING_PKCS7]) {
|
|
191
228
|
// PKCS7 is handled by CommonCrypto
|
|
192
229
|
return data;
|
|
193
230
|
}
|
|
@@ -195,16 +232,16 @@ static NSString *const FORMAT_HEX = @"HEX";
|
|
|
195
232
|
NSUInteger blockSize = kCCBlockSizeDES;
|
|
196
233
|
NSUInteger paddingLength = blockSize - (data.length % blockSize);
|
|
197
234
|
|
|
198
|
-
if (paddingLength == blockSize && [
|
|
235
|
+
if (paddingLength == blockSize && [padding isEqualToString:PADDING_NONE]) {
|
|
199
236
|
return data;
|
|
200
237
|
}
|
|
201
238
|
|
|
202
239
|
NSMutableData *paddedData = [NSMutableData dataWithData:data];
|
|
203
240
|
|
|
204
|
-
if ([
|
|
241
|
+
if ([padding isEqualToString:PADDING_ZERO] || [padding isEqualToString:PADDING_NONE]) {
|
|
205
242
|
// Zero padding
|
|
206
243
|
[paddedData setLength:data.length + paddingLength];
|
|
207
|
-
} else if ([
|
|
244
|
+
} else if ([padding isEqualToString:PADDING_ISO10126]) {
|
|
208
245
|
// ISO10126: random bytes followed by padding length
|
|
209
246
|
uint8_t randomBytes[paddingLength];
|
|
210
247
|
for (NSUInteger i = 0; i < paddingLength - 1; i++) {
|
|
@@ -217,13 +254,13 @@ static NSString *const FORMAT_HEX = @"HEX";
|
|
|
217
254
|
return paddedData;
|
|
218
255
|
}
|
|
219
256
|
|
|
220
|
-
- (NSData *)removePadding:(NSData *)data {
|
|
221
|
-
if ([
|
|
257
|
+
- (NSData *)removePadding:(NSData *)data withPadding:(NSString *)padding {
|
|
258
|
+
if ([padding isEqualToString:PADDING_PKCS7]) {
|
|
222
259
|
// PKCS7 is handled by CommonCrypto
|
|
223
260
|
return data;
|
|
224
261
|
}
|
|
225
262
|
|
|
226
|
-
if ([
|
|
263
|
+
if ([padding isEqualToString:PADDING_ZERO]) {
|
|
227
264
|
// Find last non-zero byte
|
|
228
265
|
const uint8_t *bytes = (const uint8_t *)data.bytes;
|
|
229
266
|
NSInteger lastIndex = data.length - 1;
|
|
@@ -233,7 +270,7 @@ static NSString *const FORMAT_HEX = @"HEX";
|
|
|
233
270
|
return [data subdataWithRange:NSMakeRange(0, lastIndex + 1)];
|
|
234
271
|
}
|
|
235
272
|
|
|
236
|
-
if ([
|
|
273
|
+
if ([padding isEqualToString:PADDING_ISO10126]) {
|
|
237
274
|
// Last byte indicates padding length
|
|
238
275
|
const uint8_t *bytes = (const uint8_t *)data.bytes;
|
|
239
276
|
uint8_t paddingLength = bytes[data.length - 1];
|
|
@@ -247,8 +284,8 @@ static NSString *const FORMAT_HEX = @"HEX";
|
|
|
247
284
|
|
|
248
285
|
#pragma mark - Output Formatting
|
|
249
286
|
|
|
250
|
-
- (NSString *)formatOutput:(NSData *)data {
|
|
251
|
-
if ([
|
|
287
|
+
- (NSString *)formatOutput:(NSData *)data withFormat:(NSString *)format {
|
|
288
|
+
if ([format isEqualToString:FORMAT_HEX]) {
|
|
252
289
|
NSMutableString *hexString = [NSMutableString stringWithCapacity:data.length * 2];
|
|
253
290
|
const uint8_t *bytes = (const uint8_t *)data.bytes;
|
|
254
291
|
for (NSUInteger i = 0; i < data.length; i++) {
|
|
@@ -261,8 +298,8 @@ static NSString *const FORMAT_HEX = @"HEX";
|
|
|
261
298
|
return [data base64EncodedStringWithOptions:0];
|
|
262
299
|
}
|
|
263
300
|
|
|
264
|
-
- (NSData *)parseInput:(NSString *)text {
|
|
265
|
-
if ([
|
|
301
|
+
- (NSData *)parseInput:(NSString *)text withFormat:(NSString *)format {
|
|
302
|
+
if ([format isEqualToString:FORMAT_HEX]) {
|
|
266
303
|
NSMutableData *data = [NSMutableData dataWithCapacity:text.length / 2];
|
|
267
304
|
for (NSUInteger i = 0; i < text.length; i += 2) {
|
|
268
305
|
NSString *hexByte = [text substringWithRange:NSMakeRange(i, 2)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeDesMachine.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeDesMachine.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;AA0CpE,eAAeA,mBAAmB,CAACC,YAAY,CAAO,YAAY,CAAC","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import NativeDesMachine from "./NativeDesMachine.js";
|
|
4
|
+
// Constants
|
|
4
5
|
const Padding = {
|
|
5
6
|
PKCS7: 'PKCS7',
|
|
6
7
|
ISO10126: 'ISO10126',
|
|
@@ -18,6 +19,9 @@ const Format = {
|
|
|
18
19
|
BASE64: 'BASE64',
|
|
19
20
|
HEX: 'HEX'
|
|
20
21
|
};
|
|
22
|
+
|
|
23
|
+
// Options for UI
|
|
24
|
+
|
|
21
25
|
const modeOptions = [{
|
|
22
26
|
label: 'ECB (Electronic Codebook)',
|
|
23
27
|
value: Mode.ECB
|
|
@@ -54,22 +58,156 @@ const formatOptions = [{
|
|
|
54
58
|
label: 'Hexadecimal',
|
|
55
59
|
value: Format.HEX
|
|
56
60
|
}];
|
|
61
|
+
|
|
62
|
+
// Default parameters
|
|
57
63
|
const defaultParams = {
|
|
58
64
|
mode: Mode.ECB,
|
|
59
65
|
padding: Padding.PKCS7,
|
|
60
66
|
outputFormat: Format.BASE64
|
|
61
67
|
};
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* DES Machine class for encryption and decryption.
|
|
71
|
+
* Supports multiple instances with different configurations.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* // Create a machine with default settings
|
|
76
|
+
* const machine = new DesMachine({ key: 'mySecretKey123' });
|
|
77
|
+
*
|
|
78
|
+
* // Encrypt and decrypt
|
|
79
|
+
* const encrypted = machine.encrypt('Hello World');
|
|
80
|
+
* const decrypted = machine.decrypt(encrypted);
|
|
81
|
+
*
|
|
82
|
+
* // Create another machine with custom IV for CBC mode
|
|
83
|
+
* const cbcMachine = new DesMachine({
|
|
84
|
+
* key: 'anotherKey1',
|
|
85
|
+
* iv: '12345678', // 8 characters for DES
|
|
86
|
+
* mode: Mode.CBC,
|
|
87
|
+
* outputFormat: Format.HEX,
|
|
88
|
+
* });
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
class DesMachine {
|
|
92
|
+
/**
|
|
93
|
+
* Create a new DES Machine instance.
|
|
94
|
+
* @param params - Configuration parameters
|
|
95
|
+
* @throws Error if key is missing or less than 8 characters
|
|
96
|
+
* @throws Error if iv is provided but not exactly 8 characters
|
|
97
|
+
*/
|
|
98
|
+
constructor(params) {
|
|
99
|
+
if (!params.key) {
|
|
100
|
+
throw new Error('DesMachine: key is required');
|
|
101
|
+
}
|
|
102
|
+
if (params.key.length < 8) {
|
|
103
|
+
throw new Error('DesMachine: key must be at least 8 characters long');
|
|
104
|
+
}
|
|
105
|
+
if (params.iv !== undefined && params.iv.length !== 8) {
|
|
106
|
+
throw new Error('DesMachine: iv must be exactly 8 characters long');
|
|
107
|
+
}
|
|
108
|
+
this.params = {
|
|
109
|
+
key: params.key,
|
|
110
|
+
iv: params.iv,
|
|
111
|
+
mode: params.mode ?? defaultParams.mode,
|
|
112
|
+
padding: params.padding ?? defaultParams.padding,
|
|
113
|
+
outputFormat: params.outputFormat ?? defaultParams.outputFormat
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Encrypt plaintext using DES algorithm.
|
|
119
|
+
* @param text - The plaintext to encrypt
|
|
120
|
+
* @returns Encrypted string in the configured output format
|
|
121
|
+
*/
|
|
122
|
+
encrypt(text) {
|
|
123
|
+
return NativeDesMachine.encrypt(this.params, text);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Decrypt ciphertext using DES algorithm.
|
|
128
|
+
* @param text - The encrypted string to decrypt
|
|
129
|
+
* @returns Decrypted plaintext
|
|
130
|
+
*/
|
|
131
|
+
decrypt(text) {
|
|
132
|
+
return NativeDesMachine.decrypt(this.params, text);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Get the current configuration parameters.
|
|
137
|
+
* @returns A copy of the current parameters (key and iv are masked)
|
|
138
|
+
*/
|
|
139
|
+
getParams() {
|
|
140
|
+
return {
|
|
141
|
+
...this.params,
|
|
142
|
+
key: this.params.key.substring(0, 2) + '***',
|
|
143
|
+
iv: this.params.iv ? this.params.iv.substring(0, 2) + '***' : undefined
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Update configuration parameters.
|
|
149
|
+
* @param params - New parameters to apply (key and iv cannot be changed)
|
|
150
|
+
*/
|
|
151
|
+
updateParams(params) {
|
|
152
|
+
if (params.mode) this.params.mode = params.mode;
|
|
153
|
+
if (params.padding) this.params.padding = params.padding;
|
|
154
|
+
if (params.outputFormat) this.params.outputFormat = params.outputFormat;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Create a new DES Machine instance.
|
|
160
|
+
* @param params - Configuration parameters
|
|
161
|
+
* @returns A new DesMachine instance
|
|
162
|
+
*
|
|
163
|
+
* @example
|
|
164
|
+
* ```typescript
|
|
165
|
+
* const machine = createDesMachine({ key: 'mySecretKey123' });
|
|
166
|
+
* const encrypted = machine.encrypt('Hello');
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
function createDesMachine(params) {
|
|
170
|
+
return new DesMachine(params);
|
|
67
171
|
}
|
|
68
|
-
|
|
69
|
-
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Quick encrypt function for one-off encryption.
|
|
175
|
+
* @param params - Configuration parameters including key
|
|
176
|
+
* @param text - The plaintext to encrypt
|
|
177
|
+
* @returns Encrypted string
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* ```typescript
|
|
181
|
+
* const encrypted = encrypt({ key: 'mySecretKey123' }, 'Hello World');
|
|
182
|
+
* ```
|
|
183
|
+
*/
|
|
184
|
+
function encrypt(params, text) {
|
|
185
|
+
const machine = new DesMachine(params);
|
|
186
|
+
return machine.encrypt(text);
|
|
70
187
|
}
|
|
71
|
-
|
|
72
|
-
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Quick decrypt function for one-off decryption.
|
|
191
|
+
* @param params - Configuration parameters including key
|
|
192
|
+
* @param text - The encrypted string to decrypt
|
|
193
|
+
* @returns Decrypted plaintext
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* ```typescript
|
|
197
|
+
* const decrypted = decrypt({ key: 'mySecretKey123' }, encryptedText);
|
|
198
|
+
* ```
|
|
199
|
+
*/
|
|
200
|
+
function decrypt(params, text) {
|
|
201
|
+
const machine = new DesMachine(params);
|
|
202
|
+
return machine.decrypt(text);
|
|
73
203
|
}
|
|
74
|
-
export {
|
|
204
|
+
export {
|
|
205
|
+
// Main class
|
|
206
|
+
DesMachine, createDesMachine,
|
|
207
|
+
// Quick functions
|
|
208
|
+
encrypt, decrypt,
|
|
209
|
+
// Constants
|
|
210
|
+
Mode, Padding, Format,
|
|
211
|
+
// Options for UI
|
|
212
|
+
modeOptions, paddingOptions, formatOptions };
|
|
75
213
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["NativeDesMachine","Padding","PKCS7","ISO10126","ZERO","NONE","Mode","ECB","CBC","CFB","OFB","CTR","Format","BASE64","HEX","modeOptions","label","value","paddingOptions","formatOptions","defaultParams","mode","padding","outputFormat","DesMachine","constructor","params","key","Error","length","iv","undefined","encrypt","text","decrypt","getParams","substring","updateParams","createDesMachine","machine"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,15 +3,37 @@ export type ModeEncryptionType = 'ECB' | 'CBC' | 'CFB' | 'OFB' | 'CTR';
|
|
|
3
3
|
export type PaddingEncryptionType = 'PKCS7' | 'ISO10126' | 'ZERO' | 'NONE';
|
|
4
4
|
export type OutputFormatType = 'BASE64' | 'HEX';
|
|
5
5
|
export interface DesMachineParams {
|
|
6
|
+
/**
|
|
7
|
+
* Encryption key (minimum 8 characters)
|
|
8
|
+
*/
|
|
6
9
|
key: string;
|
|
10
|
+
/**
|
|
11
|
+
* Initialization Vector for non-ECB modes (exactly 8 characters)
|
|
12
|
+
* If not provided, the first 8 bytes of the key will be used as IV
|
|
13
|
+
*/
|
|
14
|
+
iv?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Cipher mode (default: ECB)
|
|
17
|
+
*/
|
|
7
18
|
mode?: ModeEncryptionType;
|
|
19
|
+
/**
|
|
20
|
+
* Padding scheme (default: PKCS7)
|
|
21
|
+
*/
|
|
8
22
|
padding?: PaddingEncryptionType;
|
|
23
|
+
/**
|
|
24
|
+
* Output format (default: BASE64)
|
|
25
|
+
*/
|
|
9
26
|
outputFormat?: OutputFormatType;
|
|
10
27
|
}
|
|
11
28
|
export interface Spec extends TurboModule {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Encrypt text with provided params (stateless operation)
|
|
31
|
+
*/
|
|
32
|
+
encrypt(params: DesMachineParams, text: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Decrypt text with provided params (stateless operation)
|
|
35
|
+
*/
|
|
36
|
+
decrypt(params: DesMachineParams, text: string): string;
|
|
15
37
|
}
|
|
16
38
|
declare const _default: Spec;
|
|
17
39
|
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NativeDesMachine.d.ts","sourceRoot":"","sources":["../../../src/NativeDesMachine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AACvE,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAC3E,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,
|
|
1
|
+
{"version":3,"file":"NativeDesMachine.d.ts","sourceRoot":"","sources":["../../../src/NativeDesMachine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AACvE,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAC3E,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B;;OAEG;IACH,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAExD;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACzD;;AAED,wBAAoE"}
|