summaryrefslogtreecommitdiffstats
path: root/lib/oracle.go
diff options
context:
space:
mode:
Diffstat (limited to 'lib/oracle.go')
-rw-r--r--lib/oracle.go61
1 files changed, 12 insertions, 49 deletions
diff --git a/lib/oracle.go b/lib/oracle.go
index 005e392..8c7a52b 100644
--- a/lib/oracle.go
+++ b/lib/oracle.go
@@ -3,32 +3,29 @@
package lib
-import (
- "crypto/rand"
- "math/big"
-)
-
var oracleUnknown string = `Um9sbGluJyBpbiBteSA1LjAKV2l0aCBteSByYWctdG9wIGRvd24gc28gbXkg
aGFpciBjYW4gYmxvdwpUaGUgZ2lybGllcyBvbiBzdGFuZGJ5IHdhdmluZyBq
dXN0IHRvIHNheSBoaQpEaWQgeW91IHN0b3A/IE5vLCBJIGp1c3QgZHJvdmUg
YnkK`
-var OracleKey []byte = make([]byte, 16)
-var OracleIV []byte = make([]byte, 16)
-var oracleRandom []byte = make([]byte, RandomInt(1, 4096))
+var OracleKey []byte
+var OracleIV []byte
+var oracleRandom []byte
func init() {
- _, err := rand.Read(OracleKey)
+ var err error
+
+ OracleKey, err = RandomKey(16)
if err != nil {
panic(err)
}
- _, err = rand.Read(OracleIV)
+ OracleIV, err = RandomKey(16)
if err != nil {
panic(err)
}
- _, err = rand.Read(oracleRandom)
+ oracleRandom, err = RandomKey(int(RandomInt(1, 4096)))
if err != nil {
panic(err)
}
@@ -39,14 +36,12 @@ func init() {
// cipher.
func OracleAESRandomEncrypt(in []byte) []byte {
// Generate random key.
- key := make([]byte, 16)
- _, err := rand.Read(key)
+ key, err := RandomKey(16)
if err != nil {
panic(err)
}
// Generate random initialization vector; needed for AES CBC.
- iv := make([]byte, 16)
- _, err = rand.Read(iv)
+ iv, err := RandomKey(16)
if err != nil {
panic(err)
}
@@ -56,12 +51,9 @@ func OracleAESRandomEncrypt(in []byte) []byte {
in = append(in, randomBytes(5, 10)...)
// Randomly encrypt `in` with AES in ECB or CBC mode.
- m, err := rand.Int(rand.Reader, big.NewInt(2))
- if err != nil {
- panic(err)
- }
+ m := RandomInt(0, 1)
var out []byte
- if m.Int64() == 0 {
+ if m == 0 {
// Encrypt with AES in ECB mode.
out = AESEncryptECB(in, key)
} else {
@@ -80,32 +72,3 @@ func OracleAESVarEncryptECB(in []byte) []byte {
in = append(in, Base64ToBytes(oracleUnknown)...)
return AESEncryptECB(in, OracleKey)
}
-
-// Return a random number from range [min, max]
-func RandomInt(min, max int64) int64 {
- if min >= max {
- panic("RandomInt: min cannot be >= max!")
- }
-
- var rn *big.Int
- var err error
- for {
- rn, err = rand.Int(rand.Reader, big.NewInt(max+1))
- if err != nil {
- panic(err)
- }
- if rn.Int64() >= min {
- return rn.Int64()
- }
- }
-}
-
-// Randomly generates `min` to `max` bytes.
-func randomBytes(min, max int64) []byte {
- bs := make([]byte, RandomInt(min, max))
- _, err := rand.Read(bs)
- if err != nil {
- panic(err)
- }
- return bs
-}