Skip to content

Commit 95035df

Browse files
authored
DecryptMarshal: json UseNumber (#20)
1 parent 0d66d1a commit 95035df

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

symmecrypt_test.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package symmecrypt_test
33
import (
44
"bytes"
55
"encoding/json"
6+
"fmt"
67
"io"
78
"os"
89
"reflect"
@@ -102,8 +103,9 @@ func TestEncryptDecrypt(t *testing.T) {
102103
}
103104

104105
type testObfuscate struct {
105-
Name string
106-
Amount int
106+
Name string
107+
Amount int
108+
InterfaceNumber interface{}
107109
}
108110

109111
func TestEncryptDecryptMarshal(t *testing.T) {
@@ -114,8 +116,9 @@ func TestEncryptDecryptMarshal(t *testing.T) {
114116
}
115117

116118
origin := &testObfuscate{
117-
Name: "test",
118-
Amount: 10,
119+
Name: "test",
120+
Amount: 10,
121+
InterfaceNumber: 2345678954,
119122
}
120123

121124
extra := []byte("aa")
@@ -149,11 +152,11 @@ func TestEncryptDecryptMarshal(t *testing.T) {
149152
t.Fatal("succerssfully decrypted cipher without using extra data -> ERROR")
150153
}
151154

152-
if target.Name != origin.Name || target.Amount != origin.Amount {
153-
t.Errorf("Not same deobfuscated result %s, %d", target.Name, target.Amount)
155+
if target.Name != origin.Name || target.Amount != origin.Amount || fmt.Sprint(origin.InterfaceNumber) != fmt.Sprint(target.InterfaceNumber) {
156+
t.Errorf("Not same deobfuscated result %s, %d, %v", target.Name, target.Amount, target.InterfaceNumber)
154157
}
155-
if targetExtra.Name != origin.Name || targetExtra.Amount != origin.Amount {
156-
t.Errorf("Not same deobfuscated result %s, %d", targetExtra.Name, targetExtra.Amount)
158+
if targetExtra.Name != origin.Name || targetExtra.Amount != origin.Amount || fmt.Sprint(origin.InterfaceNumber) != fmt.Sprint(targetExtra.InterfaceNumber) {
159+
t.Errorf("Not same deobfuscated result %s, %d, %v", targetExtra.Name, targetExtra.Amount, targetExtra.InterfaceNumber)
157160
}
158161
}
159162

symutils/symutils.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package symutils
22

33
import (
4+
"bytes"
45
"crypto/cipher"
56
"crypto/rand"
67
"encoding/base64"
@@ -202,7 +203,9 @@ func (b KeyAEAD) DecryptMarshal(s string, target interface{}, extra ...[]byte) e
202203
if err != nil {
203204
return err
204205
}
205-
return json.Unmarshal(unciphered, target)
206+
dec := json.NewDecoder(bytes.NewReader(unciphered))
207+
dec.UseNumber()
208+
return dec.Decode(target)
206209
}
207210

208211
// Wait is a noop for regular implementations: the key is always ready

0 commit comments

Comments
 (0)