Packaging for Maven
parent
cce41220a0
commit
0cd20664c7
|
@ -0,0 +1,11 @@
|
||||||
|
.idea/**
|
||||||
|
.idea/*
|
||||||
|
.idea
|
||||||
|
*.iml
|
||||||
|
out/**
|
||||||
|
out/*
|
||||||
|
lib/**
|
||||||
|
lib/*
|
||||||
|
target/**
|
||||||
|
target/*
|
||||||
|
build.7z
|
|
@ -0,0 +1,101 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>ru.bvn13</groupId>
|
||||||
|
<artifactId>encryptedpreferences</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
|
||||||
|
|
||||||
|
<name>EncryptedPreferences</name>
|
||||||
|
<description>EncryptedPreferences for Java</description>
|
||||||
|
<url>https://github.com/bvn13/EncryptedPreferences</url>
|
||||||
|
|
||||||
|
<licenses>
|
||||||
|
<license>
|
||||||
|
<name>The Apache Software License, Version 2.0</name>
|
||||||
|
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||||
|
<distribution>repo</distribution>
|
||||||
|
</license>
|
||||||
|
</licenses>
|
||||||
|
|
||||||
|
<developers>
|
||||||
|
<developer>
|
||||||
|
<id>owner</id>
|
||||||
|
<name>Vyacheslav Boyko</name>
|
||||||
|
<email>mail4bvn@gmail.com</email>
|
||||||
|
<timezone>UTC+3</timezone>
|
||||||
|
</developer>
|
||||||
|
</developers>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
|
<github.global.server>github</github.global.server>
|
||||||
|
<github.maven-plugin>0.12</github.maven-plugin>
|
||||||
|
<!-- <github.global.oauth2Token>${env.GITHUB_OAUTH_TOKEN}</github.global.oauth2Token> -->
|
||||||
|
<site.path>https://github.com/bvn13/EncryptedPreferences</site.path>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<distributionManagement>
|
||||||
|
<repository>
|
||||||
|
<id>internal.repo</id>
|
||||||
|
<name>Temporary Staging Repository</name>
|
||||||
|
<url>file://${project.build.directory}/mvn-repo</url>
|
||||||
|
</repository>
|
||||||
|
</distributionManagement>
|
||||||
|
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${java.version}</source>
|
||||||
|
<target>${java.version}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<source>${java.version}</source>
|
||||||
|
<target>${java.version}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-deploy-plugin</artifactId>
|
||||||
|
<version>2.8.2</version>
|
||||||
|
<configuration>
|
||||||
|
<altDeploymentRepository>internal.repo::default::file://${project.build.directory}/mvn-repo</altDeploymentRepository>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>com.github.github</groupId>
|
||||||
|
<artifactId>site-maven-plugin</artifactId>
|
||||||
|
<version>${github.maven-plugin}</version>
|
||||||
|
<configuration>
|
||||||
|
<message>Maven artifacts for ${project.version}</message>
|
||||||
|
<noJekyll>true</noJekyll>
|
||||||
|
<outputDirectory>${project.build.directory}/mvn-repo</outputDirectory>
|
||||||
|
<branch>refs/heads/mvn-repo</branch>
|
||||||
|
<includes><include>**/*</include></includes>
|
||||||
|
<repositoryName>EncryptedPreferences</repositoryName>
|
||||||
|
<repositoryOwner>bvn13</repositoryOwner>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>site</goal>
|
||||||
|
</goals>
|
||||||
|
<phase>deploy</phase>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,91 @@
|
||||||
|
package ru.bvn13.encryptedpreferences;
|
||||||
|
|
||||||
|
import java.util.prefs.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by bvn13 on 22.06.2017.
|
||||||
|
*/
|
||||||
|
public class DelegatedPreferences extends AbstractPreferences
|
||||||
|
{
|
||||||
|
private AbstractPreferences target;
|
||||||
|
static private final boolean verbose = false;
|
||||||
|
|
||||||
|
protected DelegatedPreferences( AbstractPreferences parent, String name,
|
||||||
|
AbstractPreferences target ) {
|
||||||
|
super( parent, name );
|
||||||
|
this.target = target;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getSpi( String key ) {
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println( "DP["+target+"]:getSpi( "+key+" )" );
|
||||||
|
}
|
||||||
|
|
||||||
|
return target.get( key, null );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void putSpi( String key, String value ) {
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println( "DP["+target+"]:putSpi( "+key+", "+value+" )" );
|
||||||
|
}
|
||||||
|
|
||||||
|
target.put( key, value );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void removeSpi( String key ) {
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println( "DP["+target+"]:removeSpi( "+key+" )" );
|
||||||
|
}
|
||||||
|
|
||||||
|
target.remove( key );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected AbstractPreferences childSpi( String name ) {
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println( "DP["+target+"]:chlidSpi( "+name+" )" );
|
||||||
|
}
|
||||||
|
|
||||||
|
return (AbstractPreferences)target.node( name );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void removeNodeSpi() throws BackingStoreException {
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println( "DP["+target+"]:removeNode()" );
|
||||||
|
}
|
||||||
|
|
||||||
|
target.removeNode();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String[] keysSpi() throws BackingStoreException {
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println( "DP["+target+"]:keysSpi()" );
|
||||||
|
}
|
||||||
|
|
||||||
|
return target.keys();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String[] childrenNamesSpi() throws BackingStoreException {
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println( "DP["+target+"]:childrenNamesSpi()" );
|
||||||
|
}
|
||||||
|
|
||||||
|
return target.childrenNames();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void syncSpi() throws BackingStoreException {
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println( "DP["+target+"]:sync()" );
|
||||||
|
}
|
||||||
|
|
||||||
|
target.sync();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected void flushSpi() throws BackingStoreException {
|
||||||
|
if (verbose) {
|
||||||
|
System.out.println( "DP["+target+"]:flush()" );
|
||||||
|
}
|
||||||
|
|
||||||
|
target.flush();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
package ru.bvn13.encryptedpreferences;
|
||||||
|
|
||||||
|
import java.security.*;
|
||||||
|
import java.util.prefs.*;
|
||||||
|
import javax.crypto.*;
|
||||||
|
import javax.crypto.spec.*;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by bvn13 on 22.06.2017.
|
||||||
|
*/
|
||||||
|
public class EncryptedPreferences extends ObfuscatedPreferences
|
||||||
|
{
|
||||||
|
private EncryptionStuff stuff;
|
||||||
|
|
||||||
|
protected EncryptedPreferences( AbstractPreferences parent, String name,
|
||||||
|
AbstractPreferences target ) {
|
||||||
|
super( parent, name, target );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setStuff( EncryptionStuff stuff ) {
|
||||||
|
this.stuff = stuff;
|
||||||
|
}
|
||||||
|
|
||||||
|
private EncryptionStuff getStuff() {
|
||||||
|
return stuff;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String obfuscateString( String string ) {
|
||||||
|
try {
|
||||||
|
return getStuff().obfuscateString( string );
|
||||||
|
} catch( GeneralSecurityException gse ) {
|
||||||
|
gse.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String deObfuscateString( String string ) {
|
||||||
|
try {
|
||||||
|
return getStuff().deObfuscateString( string );
|
||||||
|
} catch( GeneralSecurityException gse ) {
|
||||||
|
gse.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WrappedPreferences wrapChild( WrappedPreferences parent,
|
||||||
|
String name,
|
||||||
|
AbstractPreferences child ) {
|
||||||
|
EncryptedPreferences ep = new EncryptedPreferences( parent, name, child );
|
||||||
|
ep.setStuff( stuff );
|
||||||
|
return ep;
|
||||||
|
}
|
||||||
|
|
||||||
|
static public Preferences userNodeForPackage( Class clasz,
|
||||||
|
SecretKey secretKey ) {
|
||||||
|
AbstractPreferences ap =
|
||||||
|
(AbstractPreferences)Preferences.userNodeForPackage( clasz );
|
||||||
|
EncryptedPreferences ep = new EncryptedPreferences( null, "", ap );
|
||||||
|
try {
|
||||||
|
ep.setStuff( new EncryptionStuff( secretKey ) );
|
||||||
|
return ep;
|
||||||
|
} catch( GeneralSecurityException gse ) {
|
||||||
|
gse.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
static public Preferences systemNodeForPackage( Class clasz,
|
||||||
|
SecretKey secretKey ) {
|
||||||
|
AbstractPreferences ap =
|
||||||
|
(AbstractPreferences)Preferences.systemNodeForPackage( clasz );
|
||||||
|
EncryptedPreferences ep = new EncryptedPreferences( null, "", ap );
|
||||||
|
try {
|
||||||
|
ep.setStuff( new EncryptionStuff( secretKey ) );
|
||||||
|
return ep;
|
||||||
|
} catch( GeneralSecurityException gse ) {
|
||||||
|
gse.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
package ru.bvn13.encryptedpreferences;
|
||||||
|
|
||||||
|
import java.security.*;
|
||||||
|
import javax.crypto.*;
|
||||||
|
import javax.crypto.spec.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by bvn13 on 22.06.2017.
|
||||||
|
*/
|
||||||
|
public class EncryptionStuff
|
||||||
|
{
|
||||||
|
static private final String algorithm = "DES";
|
||||||
|
static private SecureRandom sr = new SecureRandom();
|
||||||
|
private SecretKey secretKey;
|
||||||
|
private Cipher cipher;
|
||||||
|
|
||||||
|
public EncryptionStuff( SecretKey secretKey ) throws GeneralSecurityException {
|
||||||
|
this.secretKey = secretKey;
|
||||||
|
|
||||||
|
cipher = Cipher.getInstance( algorithm );
|
||||||
|
}
|
||||||
|
|
||||||
|
public String arrayToString( byte raw[] ) {
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
for (int i=0; i<raw.length; ++i) {
|
||||||
|
short s = (short)raw[i];
|
||||||
|
if (s>0)
|
||||||
|
s += 256;
|
||||||
|
int hi = s>>4;
|
||||||
|
int lo = s&0xf;
|
||||||
|
sb.append( (char)('a'+hi) );
|
||||||
|
sb.append( (char)('a'+lo) );
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] stringToArray( String string ) {
|
||||||
|
StringBuffer sb = new StringBuffer( string );
|
||||||
|
int len = sb.length();
|
||||||
|
|
||||||
|
if ((len&1)==1)
|
||||||
|
throw new RuntimeException( "String must be of even length! "+string );
|
||||||
|
|
||||||
|
byte raw[] = new byte[len/2];
|
||||||
|
int ii=0;
|
||||||
|
for (int i=0; i<len; i+=2) {
|
||||||
|
int hic = sb.charAt( i ) - 'a';
|
||||||
|
int loc = sb.charAt( i+1 ) - 'a';
|
||||||
|
byte b = (byte)( (hic<<4) | loc );
|
||||||
|
raw[ii++] = b;
|
||||||
|
}
|
||||||
|
return raw;
|
||||||
|
}
|
||||||
|
|
||||||
|
synchronized public String obfuscateString( String string )
|
||||||
|
throws GeneralSecurityException {
|
||||||
|
cipher.init( Cipher.ENCRYPT_MODE, secretKey, sr );
|
||||||
|
byte raw[] = string.getBytes();
|
||||||
|
byte oraw[] = cipher.doFinal( raw );
|
||||||
|
String ostring = arrayToString( oraw );
|
||||||
|
return ostring;
|
||||||
|
}
|
||||||
|
|
||||||
|
synchronized public String deObfuscateString( String string )
|
||||||
|
throws GeneralSecurityException {
|
||||||
|
cipher.init( Cipher.DECRYPT_MODE, secretKey, sr );
|
||||||
|
byte raw[] = stringToArray( string );
|
||||||
|
byte draw[] = cipher.doFinal( raw );
|
||||||
|
String dstring = new String( draw );
|
||||||
|
return dstring;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package ru.bvn13.encryptedpreferences;
|
||||||
|
|
||||||
|
import java.util.prefs.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by bvn13 on 22.06.2017.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public abstract class ObfuscatedPreferences extends WrappedPreferences
|
||||||
|
{
|
||||||
|
protected ObfuscatedPreferences( AbstractPreferences parent, String name,
|
||||||
|
AbstractPreferences target ) {
|
||||||
|
super( parent, name, target );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getSpi( String key ) {
|
||||||
|
return deObfuscateString( super.getSpi( obfuscateString( key ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void putSpi( String key, String value ) {
|
||||||
|
super.putSpi( obfuscateString( key ), obfuscateString( value ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void removeSpi( String key ) {
|
||||||
|
super.removeSpi( obfuscateString( key ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String[] keysSpi() throws BackingStoreException {
|
||||||
|
String keys[] = super.keysSpi();
|
||||||
|
String dkeys[] = (String[])keys.clone();
|
||||||
|
for (int i=0; i<dkeys.length; ++i) {
|
||||||
|
dkeys[i] = deObfuscateString( dkeys[i] );
|
||||||
|
}
|
||||||
|
return dkeys;
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract public String obfuscateString( String string );
|
||||||
|
abstract public String deObfuscateString( String string );
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package ru.bvn13.encryptedpreferences;
|
||||||
|
|
||||||
|
import java.util.prefs.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by bvn13 on 22.06.2017.
|
||||||
|
*/
|
||||||
|
abstract public class WrappedPreferences extends DelegatedPreferences
|
||||||
|
{
|
||||||
|
protected WrappedPreferences( AbstractPreferences parent, String name,
|
||||||
|
AbstractPreferences target ) {
|
||||||
|
super( parent, name, target );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected AbstractPreferences childSpi( String name ) {
|
||||||
|
return wrapChild( this, name,
|
||||||
|
(AbstractPreferences)super.childSpi( name ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
public WrappedPreferences wrapChild( WrappedPreferences parent,
|
||||||
|
String name,
|
||||||
|
AbstractPreferences child ) {
|
||||||
|
throw new UnsupportedOperationException(
|
||||||
|
"You must override WrappedPreferences.wrapChild()" );
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue