ige
github.com/karlmcguire/ige
go get github.com/karlmcguire/ige
ige

github.com/karlmcguire/ige

IGE block cipher mode for Go.

by Karl McGuire

v0.0.0-20180620203807-493ac28b459a (see all)License:MIT
go get github.com/karlmcguire/ige
Readme

ige

GoDoc Go Report Card Coverage

IGE block cipher mode for Go.

about

IGE is a block cipher mode usually used with AES. It's most notably used in Telegram's MTProto Protocol. It can be defined as the following function:

c_i = f_k(p_i ^ c_{i-1}) ^ p_{i-1}
  • c_i is ciphertext of the i block
  • p_i is plaintext of the i block
  • f_k is the block cipher function with k as the key

Here is a diagram of the above function:

Note that c_0 and m_0 in the diagram represent the initilization vectors. This implementation requires an initialization vector of two blocks. The first block is used as c_0. The second block is used as m_0.

testing

I'm using the test vectors described in the official OpenSSL IGE paper. You can execute the tests yourself by running:

$ go test

test vector 1

key

00010203 04050607 08090A0B 0C0D0E0F

initialization vector

00010203 04050607 08090A0B 0C0D0E0F
10111213 14151617 18191A1B 1C1D1E1F

plaintext

00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000

ciphertext

test vector 2

key

54686973 20697320 616E2069 6D706C65

initialization vector

6D656E74 6174696F 6E206F66 20494745
206D6F64 6520666F 72204F70 656E5353

plaintext

99706487 A1CDE613 BC6DE0B6 F24B1C7A
A448C8B9 C3403E34 67A8CAD8 9340F53B

ciphertext

4C2E204C 65742773 20686F70 65204265
6E20676F 74206974 20726967 6874210A

GitHub Stars

11

LAST COMMIT

4yrs ago

MAINTAINERS

0

CONTRIBUTORS

2

OPEN ISSUES

1

OPEN PRs

0
VersionTagPublished
v0.0.0-20180620203807-493ac28b459a
3yrs ago
No alternatives found
No tutorials found
Add a tutorial