Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement FPE Masker and add test. #1

Open
wants to merge 1 commit into
base: hub-dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 13 additions & 17 deletions components/mask-service/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,41 +13,37 @@
<artifactId>mask-service</artifactId>

<dependencies>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.2</version>
</dependency>

<dependency>
<groupId>com.idealista</groupId>
<artifactId>format-preserving-encryption</artifactId>
<version>1.0.0</version>
</dependency>


<!--Unit test dependencies -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.assertj/assertj-core -->
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.11.1</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.2</version>
</dependency>

<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public PropertyMaskable getMaskable(String maskingAlgorithem){
maskable = new FPEMasker();
break;
case "Custom":
maskable = new CustomMasker();
maskable = null; //new CustomMasker();
default:
maskable = new DefaultMasker();
break;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,95 @@
package com.wso2telco.core.maskservice.PerpoertyMasker;

import com.idealista.fpe.FormatPreservingEncryption;
import com.idealista.fpe.builder.FormatPreservingEncryptionBuilder;
import com.idealista.fpe.config.Alphabet;
import com.idealista.fpe.config.GenericDomain;
import com.idealista.fpe.config.GenericTransformations;
import com.idealista.fpe.transformer.IntToTextTransformer;
import com.idealista.fpe.transformer.TextToIntTransformer;
import com.wso2telco.core.maskservice.PropertyMaskable;

public class FPEMasker implements PropertyMaskable {
@Override
public String encryptProperty(String property) throws Exception{
return "FPEMasker";
String returnedUserId = property;

String secretKey = "changethischange";
String tweakKey = "changethis";

if (secretKey != null && !secretKey.isEmpty()) {
returnedUserId = encrypt(returnedUserId, secretKey, tweakKey);
} else {
// log.error("Error while getting configuration, MSISDN_ENCRIPTION_KEY is not provided");
}

return returnedUserId;
}

@Override
public String decryptProperty(String property) {
return null;

String returnedUserId = property;

String secretKey = "changethischange";
String tweakKey = "changethis";

if (secretKey != null && !secretKey.isEmpty()) {
returnedUserId = decrypt(returnedUserId, secretKey, tweakKey);
} else {
// log.error("Error while getting configuration, MSISDN_ENCRIPTION_KEY is not provided");
}

return returnedUserId;
}

private static String encrypt(String userId, String secretKey, String tweakKey) {

BasicNums numAlphabet = new BasicNums();
TextToIntTransformer textToIntTransformer = new GenericTransformations(numAlphabet.availableCharacters());
IntToTextTransformer intToTextTransformer = new GenericTransformations(numAlphabet.availableCharacters());

// with default values
FormatPreservingEncryption formatPreservingEncryption = FormatPreservingEncryptionBuilder
.ff1Implementation()
.withDomain(new GenericDomain(new BasicNums(), textToIntTransformer, intToTextTransformer))
.withDefaultPseudoRandomFunction(secretKey.getBytes())
.withDefaultLengthRange()
.build();

return formatPreservingEncryption.encrypt(userId, tweakKey.getBytes());
}


private static String decrypt(String maskedUserId, String secretKey, String tweakKey) {
BasicNums numAlphabet = new BasicNums();
TextToIntTransformer textToIntTransformer = new GenericTransformations(numAlphabet.availableCharacters());
IntToTextTransformer intToTextTransformer = new GenericTransformations(numAlphabet.availableCharacters());

// with default values
FormatPreservingEncryption formatPreservingEncryption = FormatPreservingEncryptionBuilder
.ff1Implementation()
.withDomain(new GenericDomain(new BasicNums(), textToIntTransformer, intToTextTransformer))
.withDefaultPseudoRandomFunction(secretKey.getBytes())
.withDefaultLengthRange()
.build();

return formatPreservingEncryption.decrypt(maskedUserId, tweakKey.getBytes());
}

}

class BasicNums implements Alphabet {

private static final char[] NUM_CHARS = new char[] {'1', '2', '3', '4', '5', '6', '7', '8', '9' , '0'};

@Override
public char[] availableCharacters() {
return NUM_CHARS ;
}

@Override
public Integer radix() {
return NUM_CHARS.length;
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
package com.wso2telco.core.maskservice.MaskerService;

import junit.framework.TestCase;
import org.testng.Assert;
import org.testng.annotations.Test;

public class MaskingHandlerTest extends TestCase {
public class MaskingHandlerTest {

@Test
public void testGetEncryptedValue() {
MaskingHandler maskingHandler =new MaskingHandler();
String enValue = maskingHandler.getEncryptedValue("94773906141","BCMask");
System.out.println(enValue);
}




@Test
public void testGetEncryptedValueFPEMask() {
MaskingHandler maskingHandler =new MaskingHandler();
String enValue = maskingHandler.getEncryptedValue("94773906141","FPEMasker");
System.out.println(enValue);
}

}
2 changes: 1 addition & 1 deletion components/redis-client/dependency-reduced-pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<parent>
<artifactId>core-parent</artifactId>
<groupId>com.wso2telco.core</groupId>
<version>2.4.4-SNAPSHOT</version>
<version>2.4.6-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
Expand Down
20 changes: 20 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,26 @@
<version>1.2</version>
</dependency>

<!--Unit test dependencies -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.11.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>

</dependencies>
</dependencyManagement>

Expand Down