1
+ use neon:: types:: buffer:: TypedArray ;
1
2
use neon:: { prelude:: * , types:: JsBuffer } ;
2
3
use recrypt:: api:: {
3
4
AuthHash , Ed25519Signature , EncryptedMessage , EncryptedTempKey , EncryptedValue , HashedValue ,
@@ -9,10 +10,9 @@ use recrypt::nonemptyvec::NonEmptyVec;
9
10
/// Create an `$n` byte fixed u8 array given the provided JsBuffer handle. Throws an error if the provided Buffer
10
11
/// is not of the required length.
11
12
macro_rules! buffer_to_fixed_bytes { ( $( $fn_name: ident, $n: expr) ; * ) => {
12
- $( pub fn $fn_name<' a, T >( cx: & T , mut buffer: Handle <JsBuffer >, field_name: & str ) -> [ u8 ; $n]
13
+ $( pub fn $fn_name<' a, T >( cx: & T , buffer: Handle <JsBuffer >, field_name: & str ) -> [ u8 ; $n]
13
14
where T : Context <' a>{
14
- let guard = cx. lock( ) ;
15
- let slice = buffer. borrow_mut( & guard) . as_slice:: <u8 >( ) ;
15
+ let slice = buffer. as_slice( cx) ;
16
16
if slice. len( ) != $n {
17
17
panic!( "Provided Buffer for '{}' is not of expected size of {} bytes. Instead got {} bytes." , field_name, $n, slice. len( ) ) ;
18
18
}
@@ -36,24 +36,17 @@ macro_rules! buffer_to_signature { ($($fn_name: ident, $sig_type: expr, $ret_typ
36
36
buffer_to_signature ! { buffer_to_schnorr_signature, SchnorrSignature :: new, SchnorrSignature ; buffer_to_ed25519_signature, Ed25519Signature :: new, Ed25519Signature }
37
37
38
38
/// Convert a JsBuffer handle of variable size into a vector
39
- pub fn buffer_to_variable_bytes < ' a , T : Context < ' a > > (
40
- cx : & T ,
41
- mut buffer : Handle < JsBuffer > ,
42
- ) -> Vec < u8 > {
43
- let guard = cx. lock ( ) ;
44
- let slice = buffer. borrow_mut ( & guard) . as_slice :: < u8 > ( ) ;
45
- slice. to_vec ( )
39
+ pub fn buffer_to_variable_bytes < ' a , T : Context < ' a > > ( cx : & T , buffer : Handle < JsBuffer > ) -> Vec < u8 > {
40
+ buffer. as_slice ( cx) . to_vec ( )
46
41
}
47
42
48
43
/// Copy the bytes from the provided u8 slice into the provided JS Buffer object
49
44
pub fn bytes_to_buffer < ' a , T : Context < ' a > > (
50
45
cx : & mut T ,
51
46
data : & [ u8 ] ,
52
47
) -> NeonResult < Handle < ' a , JsBuffer > > {
53
- let mut buffer: Handle < JsBuffer > = cx. buffer ( data. len ( ) as u32 ) ?;
54
- cx. borrow_mut ( & mut buffer, |contents| {
55
- contents. as_mut_slice ( ) . copy_from_slice ( data)
56
- } ) ;
48
+ let mut buffer: Handle < JsBuffer > = cx. buffer ( data. len ( ) as usize ) ?;
49
+ buffer. as_mut_slice ( cx) . copy_from_slice ( data) ;
57
50
Ok ( buffer)
58
51
}
59
52
@@ -72,16 +65,8 @@ pub fn js_object_to_public_key<'a, T: Context<'a>>(
72
65
cx : & mut T ,
73
66
object : Handle < JsObject > ,
74
67
) -> PublicKey {
75
- let x = object
76
- . get ( cx, "x" )
77
- . unwrap ( )
78
- . downcast :: < JsBuffer , _ > ( cx)
79
- . unwrap ( ) ;
80
- let y = object
81
- . get ( cx, "y" )
82
- . unwrap ( )
83
- . downcast :: < JsBuffer , _ > ( cx)
84
- . unwrap ( ) ;
68
+ let x = object. get ( cx, "x" ) . unwrap ( ) ;
69
+ let y = object. get ( cx, "y" ) . unwrap ( ) ;
85
70
86
71
PublicKey :: new ( (
87
72
buffer_to_fixed_32_bytes ( cx, x, "publicKey.x" ) ,
@@ -110,39 +95,15 @@ pub fn js_object_to_transform_key<'a, T: Context<'a>>(
110
95
cx : & mut T ,
111
96
object : Handle < JsObject > ,
112
97
) -> TransformKey {
113
- let encrypted_temp_key_buffer = object
114
- . get ( cx, "encryptedTempKey" )
115
- . unwrap ( )
116
- . downcast :: < JsBuffer , _ > ( cx)
117
- . unwrap ( ) ;
118
- let emphemeral_public_key_obj = object
119
- . get ( cx, "ephemeralPublicKey" )
120
- . unwrap ( )
121
- . downcast :: < JsObject , _ > ( cx)
122
- . unwrap ( ) ;
123
- let hashed_temp_key_buffer = object
124
- . get ( cx, "hashedTempKey" )
125
- . unwrap ( )
126
- . downcast :: < JsBuffer , _ > ( cx)
127
- . unwrap ( ) ;
128
- let public_signing_key_buffer = object
129
- . get ( cx, "publicSigningKey" )
130
- . unwrap ( )
131
- . downcast :: < JsBuffer , _ > ( cx)
132
- . unwrap ( ) ;
133
- let signature_buffer = object
134
- . get ( cx, "signature" )
135
- . unwrap ( )
136
- . downcast :: < JsBuffer , _ > ( cx)
137
- . unwrap ( ) ;
138
- let to_public_key_obj = object
139
- . get ( cx, "toPublicKey" )
140
- . unwrap ( )
141
- . downcast :: < JsObject , _ > ( cx)
142
- . unwrap ( ) ;
98
+ let encrypted_temp_key_buffer = object. get ( cx, "encryptedTempKey" ) . unwrap ( ) ;
99
+ let ephemeral_public_key_obj = object. get ( cx, "ephemeralPublicKey" ) . unwrap ( ) ;
100
+ let hashed_temp_key_buffer = object. get ( cx, "hashedTempKey" ) . unwrap ( ) ;
101
+ let public_signing_key_buffer = object. get ( cx, "publicSigningKey" ) . unwrap ( ) ;
102
+ let signature_buffer = object. get ( cx, "signature" ) . unwrap ( ) ;
103
+ let to_public_key_obj = object. get ( cx, "toPublicKey" ) . unwrap ( ) ;
143
104
144
105
TransformKey :: new (
145
- js_object_to_public_key ( cx, emphemeral_public_key_obj ) ,
106
+ js_object_to_public_key ( cx, ephemeral_public_key_obj ) ,
146
107
js_object_to_public_key ( cx, to_public_key_obj) ,
147
108
EncryptedTempKey :: new ( buffer_to_fixed_384_bytes (
148
109
cx,
@@ -200,25 +161,12 @@ pub fn js_object_to_transform_blocks<'a, T: Context<'a>>(
200
161
. iter ( )
201
162
. map ( |block| {
202
163
let block_obj = block. downcast :: < JsObject , _ > ( cx) . unwrap ( ) ;
203
- let public_key = block_obj
204
- . get ( cx, "publicKey" )
205
- . unwrap ( )
206
- . downcast :: < JsObject , _ > ( cx)
207
- . unwrap ( ) ;
208
- let encrypted_temp_key = block_obj
209
- . get ( cx, "encryptedTempKey" )
210
- . unwrap ( )
211
- . downcast :: < JsBuffer , _ > ( cx)
212
- . unwrap ( ) ;
213
- let random_transform_public_key = block_obj
214
- . get ( cx, "randomTransformPublicKey" )
215
- . unwrap ( )
216
- . downcast :: < JsObject , _ > ( cx)
217
- . unwrap ( ) ;
164
+ let public_key = block_obj. get ( cx, "publicKey" ) . unwrap ( ) ;
165
+ let encrypted_temp_key = block_obj. get ( cx, "encryptedTempKey" ) . unwrap ( ) ;
166
+ let random_transform_public_key =
167
+ block_obj. get ( cx, "randomTransformPublicKey" ) . unwrap ( ) ;
218
168
let random_transform_encrypted_temp_key = block_obj
219
169
. get ( cx, "randomTransformEncryptedTempKey" )
220
- . unwrap ( )
221
- . downcast :: < JsBuffer , _ > ( cx)
222
170
. unwrap ( ) ;
223
171
224
172
TransformBlock :: new (
@@ -279,35 +227,17 @@ pub fn js_object_to_encrypted_value<'a, T: Context<'a>>(
279
227
object : Handle < JsObject > ,
280
228
) -> EncryptedValue {
281
229
let emphemeral_public_key_obj = object
282
- . get ( cx, "ephemeralPublicKey" )
283
- . unwrap ( )
284
- . downcast :: < JsObject , _ > ( cx)
230
+ . get :: < JsObject , _ , _ > ( cx, "ephemeralPublicKey" )
285
231
. unwrap ( ) ;
286
232
let encrypted_message_buffer = object
287
- . get ( cx, "encryptedMessage" )
288
- . unwrap ( )
289
- . downcast :: < JsBuffer , _ > ( cx)
290
- . unwrap ( ) ;
291
- let auth_hash_buffer = object
292
- . get ( cx, "authHash" )
293
- . unwrap ( )
294
- . downcast :: < JsBuffer , _ > ( cx)
233
+ . get :: < JsBuffer , _ , _ > ( cx, "encryptedMessage" )
295
234
. unwrap ( ) ;
235
+ let auth_hash_buffer = object. get :: < JsBuffer , _ , _ > ( cx, "authHash" ) . unwrap ( ) ;
296
236
let public_signing_key_buffer = object
297
- . get ( cx, "publicSigningKey" )
298
- . unwrap ( )
299
- . downcast :: < JsBuffer , _ > ( cx)
300
- . unwrap ( ) ;
301
- let signature_buffer = object
302
- . get ( cx, "signature" )
303
- . unwrap ( )
304
- . downcast :: < JsBuffer , _ > ( cx)
305
- . unwrap ( ) ;
306
- let transform_blocks = object
307
- . get ( cx, "transformBlocks" )
308
- . unwrap ( )
309
- . downcast :: < JsArray , _ > ( cx)
237
+ . get :: < JsBuffer , _ , _ > ( cx, "publicSigningKey" )
310
238
. unwrap ( ) ;
239
+ let signature_buffer = object. get :: < JsBuffer , _ , _ > ( cx, "signature" ) . unwrap ( ) ;
240
+ let transform_blocks = object. get :: < JsArray , _ , _ > ( cx, "transformBlocks" ) . unwrap ( ) ;
311
241
312
242
// create the encrypted value and return it
313
243
if transform_blocks. len ( cx) > 0 {
@@ -346,7 +276,7 @@ pub fn js_object_to_encrypted_value<'a, T: Context<'a>>(
346
276
}
347
277
}
348
278
349
- /// Convert a Recrypt EncryptedValue into a JsObbject with expeted properties and bytes converted to Buffers.
279
+ /// Convert a Recrypt EncryptedValue into a JsObject with expected properties and bytes converted to Buffers.
350
280
pub fn encrypted_value_to_js_object < ' a , T : Context < ' a > > (
351
281
cx : & mut T ,
352
282
encrypted_value : EncryptedValue ,
0 commit comments