https://github.com/brake/milenage
Java implementation of 3GPP™ TS 35.206 Milenage algorithm
https://github.com/brake/milenage
3gpp algorithm calculations java javadoc telecom
Last synced: 4 months ago
JSON representation
Java implementation of 3GPP™ TS 35.206 Milenage algorithm
- Host: GitHub
- URL: https://github.com/brake/milenage
- Owner: brake
- Created: 2016-03-09T17:37:20.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2016-10-15T20:56:31.000Z (about 9 years ago)
- Last Synced: 2025-06-01T14:06:18.119Z (5 months ago)
- Topics: 3gpp, algorithm, calculations, java, javadoc, telecom
- Language: Java
- Homepage:
- Size: 73.2 KB
- Stars: 13
- Watchers: 5
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Milenage for Java
[](https://opensource.org/licenses/MIT) [](https://badge.fury.io/gh/brake%2Fmilenage) [](https://maven-badges.herokuapp.com/maven-central/com.github.brake.threegpp/milenage) 
Java™ library designed to support [3GPP](http://www.3gpp.org)™ Milenage algorithm calculations according to **3GPP TS 35.206**.
Has written from scratch i.e. is not based on C sourse code from [3GPP](http://www.3gpp.org)™ TS 35.206 Annex 3.### Table of Contents
* [Features](#features)
* [Requirements](#requirements)
* [Download](#download)
* [Usage](#usage)
* [Documentation](#documentation)
* [License](#license)
* [Alternatives](#alternatives)## Features
*OPc
calculation based on `OP` and `K`
* All Authentication and Key Generationfn
functions includingf1\*
andf5\*
* Algorithm customization with `R` and `C` constants
* Implementation customization:
There is a `MilenageBuffer` interface supporting all operations Milenage uses under the hood, like bit shift, XOR etc.
You can provide your own implementation, but library offers default implementation based on `BigInteger` class.
For cryptography purposes library uses `Cipher` object from `javax.crypto` package so you can use any ciphering algorithm having the buffer size 128 bits as well as "default" [Rijndael](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard?oldformat=true).
* You can choose method of invocation of Milenage functions:
* call each function separetely
* call a full set of functions at once, in this case a call of every function _can_ be asynchronous.
It's configurable through `ExecutorService` object.
## RequirementsJava 1.7 or higher.
## Download
#### Gradle
```gradle
compile 'com.github.brake.threegpp:milenage:1.0.0'
```#### Maven
```xml
com.github.brake.threegpp
milenage
1.0.0```
## Usage
### Basic```java
// 1. Create instance of MilenageBufferFactory interface by
// instantiating BigIngegerBufferFactory object.
MilenageBufferFactory bufferFactory = BigIntegerBufferFactory.getInstance();// 2. Create instance of javax.crypto.Cypher from a key
// using a helper class threegpp.milenage.cipher.Ciphers.Cipher cipher = Ciphers.createRijndaelCipher(keyBytes);
// 3. Create OPc value from OP bytes and K, represented by the
// previously created Cipher object.byte [] OPc = Milenage.calculateOPc(opBytes, cipher, bufferFactory);
// 4. Create the Milenage instance for `OPc` and Cipher instances with MilenageBufferFactory.
Milenage milenage = new Milenage<>(OPc, cipher, bufferFactory);
// 5. Use the Milenage instance with input data (RAND, SQN, AMF)
try {
Map result = melenage.calculateAll(rand, sqn, amf, Executors.newCachedThreadPull);} catch(InterruptedException | ExecutionExceprtion e) {
// handle exception
}// 6. Use the result
useMacA(result.get(MilenageResult.MAC_A));
useMacS(result.get(MilenateResult.MAC_S));
useResponse(result.get(MilenageResult.RES));
useConfinentialityKey(result.get(MilenageResult.CK));
useIntegrityKey(result.get(MilenageResult.IK));
useAnonimityKey(result.get(MilenageResult.AK));
useResynchAnonimityKey(result.get(MilenageResult.AK_R))```
You can see working example in [test code](src/test/java/threegpp/milenage/MilenageTest.java).
### Advanced Usage
TBD
## Documentation
[Javadoc](https://brake.github.io/milenage/)
## License
Copyright © 2015-2016 Constantin Roganov
Distributed under the [MIT License](https://opensource.org/licenses/MIT).
## Alternatives
1. [This project](http://www.ict-adamantium.eu/SIP-Agent/) has a Milenage implementation (LGPL 2.1) [Javadoc](http://www.ict-adamantium.eu/SIP-Agent/javadoc/net/java/sip/communicator/sip/security/Milenage.html).