KeyStore

KeyStore는 AergoKey를 관리하는 기능을 제공합니다. KeyStore를 사용해서 저장, 로드, 삭제를 할 수 있습니다. 제공되는 타입은 다음과 같습니다.

  • InMemoryKeystore
  • JavaKeyStore
  • AergoKeyStore

Create

Heraj는 KeyStore를 생성하기 위한 factory method를 제공합니다.

InMemoryKeystore

InMemoryKeystore는 AergoKey를 메모리에 저장합니다.

// make a keystore
KeyStore keyStore = KeyStores.newInMemoryKeyStore();
System.out.println("InMemoryKeystore: " + keyStore);
System.out.println("Stored keys: " + keyStore.listIdentities());

JavaKeyStore

JavaKeyStore는 java.security.keystore를 사용합니다. 생성 시 해당 객체를 factory method에 전달해야 합니다

// create a java keystore
java.security.KeyStore delegate = java.security.KeyStore.getInstance("PKCS12");
delegate.load(new FileInputStream(someDir + "/keystore.p12"), "password".toCharArray());

// make a keystore
KeyStore keyStore = KeyStores.newJavaKeyStore(delegate);
System.out.println("JavaKeyStore: " + keyStore);
System.out.println("Stored keys: " + keyStore.listIdentities());

AergoKeyStore

AergoKeyStore는 AergoKey를 aergo만의 방법으로 관리합니다. 만들어진 keystore는 aergocli로 생성한 keystore와 호환됩니다. aergocli로 keystore를 만드는 방법은 다음에 나와있습니다 Creating Accounts.

// make a keystore
String root = someDir + "/aergo_keystore";
KeyStore keyStore = KeyStores.newAergoKeyStore(root);
System.out.println("AergoKeyStore: " + keyStore);
System.out.println("Stored keys: " + keyStore.listIdentities());

Save and Load

AergoKey에 대해 저장 및 로드를 할 수 있습니다.

alias를 사용해서 할 수 있습니다.

// create a keystore
KeyStore keyStore = KeyStores.newInMemoryKeyStore();

// create an new key
AergoKey key = new AergoKeyGenerator().create();

// save
Authentication authentication = Authentication.of(KeyAlias.of("myalias"), "password");
keyStore.save(authentication, key);

주소 자체를 사용해서 할 수 있습니다.

// create an keystore
KeyStore keyStore = KeyStores.newInMemoryKeyStore();

// create an new key
AergoKey key = new AergoKeyGenerator().create();

// save
Authentication authentication = Authentication.of(key.getAddress(), "password");
keyStore.save(authentication, key);

Remove

keystore에 저장되어 있는 AergoKey를 삭제할 수 있습니다.

alias를 사용해서 할 수 있습니다.

// create a keystore
KeyStore keyStore = KeyStores.newInMemoryKeyStore();

// create an new key
AergoKey key = new AergoKeyGenerator().create();

// save
Authentication authentication = Authentication.of(KeyAlias.of("myalias"), "password");
keyStore.save(authentication, key);

// remove
System.out.println("Before remove: " + keyStore.listIdentities());
keyStore.remove(authentication);
System.out.println("After remove: " + keyStore.listIdentities());

주소 자체를 사용해서 할 수 있습니다.

// create a keystore
KeyStore keyStore = KeyStores.newInMemoryKeyStore();

// create an new key
AergoKey key = new AergoKeyGenerator().create();

// save
Authentication authentication = Authentication.of(key.getAddress(), "password");
keyStore.save(authentication, key);

// remove
System.out.println("Before remove: " + keyStore.listIdentities());
keyStore.remove(authentication);
System.out.println("After remove: " + keyStore.listIdentities());

Export

keystore에 저장되어 있는 AergoKey를 wallet import format으로 export할 수 있습니다.

alias를 사용해서 할 수 있습니다.

// create a keystore
KeyStore keyStore = KeyStores.newInMemoryKeyStore();

// create an new key
AergoKey key = new AergoKeyGenerator().create();

// save
Authentication authentication = Authentication.of(KeyAlias.of("myalias"), "password");
keyStore.save(authentication, key);

// export
EncryptedPrivateKey exported = keyStore.export(authentication, "newpassword");
System.out.println("Exported: " + exported);

주소 자체를 사용해서 할 수 있습니다.

// create a keystore
KeyStore keyStore = KeyStores.newInMemoryKeyStore();

// create an new key
AergoKey key = new AergoKeyGenerator().create();

// save
Authentication authentication = Authentication.of(key.getAddress(), "password");
keyStore.save(authentication, key);

// export
EncryptedPrivateKey exported = keyStore.export(authentication, "newpassword");
System.out.println("Exported: " + exported);

List Stored Identities

keystore에 저장되어 있는 키에 대한 이름들을 확인할 수 있습니다.

// create a keystore
KeyStore keyStore = KeyStores.newInMemoryKeyStore();

// create an new key
AergoKey key = new AergoKeyGenerator().create();

// save
Authentication authentication = Authentication.of(KeyAlias.of("myalias"), "password");
keyStore.save(authentication, key);

// list
List<Identity> identities = keyStore.listIdentities();
System.out.println("Stored identities: " + identities);

Store

keystore를 특정 파일로 저장힙니다. 이 기능은 JavaKeyStore에서만 동작합니다. 다른 타입에 대해서는 아무 것도 하지 않습니다.

// prepare a java keystore
java.security.KeyStore delegate = java.security.KeyStore.getInstance("PKCS12");
delegate.load(null, null);

// create a java keystore
KeyStore keyStore = KeyStores.newJavaKeyStore(delegate);

// store
String path = someDir + "/" + randomUUID().toString();
keyStore.store(path, "password".toCharArray());