示例#1
0
文件: OCPAgent.java 项目: ccbon/ocp
  public void createUser(
      String login, String password, int backupNbr, Captcha captcha, String answer)
      throws Exception {
    LOG.info("creating user: "******", " + password + ", " + backupNbr + ", answer=" + answer);
    LOG.info("captcha=" + captcha);
    OCPUser user = new OCPUser(this, login, backupNbr);
    UserPublicInfo upi = user.getPublicInfo(this);

    ContactMap contactMap = ds().getComponent(ContactMap.class);
    Contact contact = contactMap.getContact(captcha.contactId);

    // 1) create the public part of the user.
    // catpcha is required in order to avoid massive fake user creation
    Data publicUserData = new Data(this, user, ds().serializer.serialize(upi));
    Link publicUserDataLink =
        new Link(user, this, UserPublicInfo.getKey(this, login), publicUserData.getKey(this));

    getClient().createUser(contact, publicUserData, publicUserDataLink, captcha, answer);

    // 2) create the private part of the user.
    // no need captcha because creation of object is checked by the user
    // public info
    Key key = new Key(hash(ucrypt(password, (login + password).getBytes())));
    byte[] content = ucrypt(password, ds().serializer.serialize(user));
    Content privateUserData = new Data(this, user, content);
    Link privateUserDataLink = new Link(user, this, key, privateUserData.getKey(this));

    setWithLink(user, privateUserData, privateUserDataLink);
  }
示例#2
0
文件: OCPAgent.java 项目: ccbon/ocp
 public Pointer set(OCPUser user, byte[] bytes) throws Exception {
   // 1) Create all the data objects
   Key[] keys = new Key[user.getBackupNbr()];
   for (int i = 0; i < user.getBackupNbr(); i++) {
     byte[] bkp = new byte[1];
     bkp[0] = (byte) i;
     byte[] bkpBytes = ByteUtil.concat(bkp, bytes);
     byte[] ciphertext = user.crypt(bkpBytes);
     Data data = new Data(this, user, ciphertext);
     keys[i] = set(data);
   }
   // 2) create the pointer link
   Pointer pointer = makePointer(user, keys);
   // 3 ) add the pointer to the user index.
   user.add(this, pointer);
   return pointer;
 }
示例#3
0
文件: OCPAgent.java 项目: ccbon/ocp
 public void remove(OCPUser user, Pointer pointer) throws Exception {
   // 1) retrieve and remove the key list from pointer
   Key[] keys = getKeys(user, pointer);
   for (int i = 0; i < keys.length; i++) {
     remove(user, keys[i]);
   }
   // 2) remove the pointer as a key
   remove(user, new Key(pointer.getBytes()));
   // 3) remove the pointer from the user index
   user.remove(this, pointer);
 }
示例#4
0
文件: OCPAgent.java 项目: ccbon/ocp
 private Key[] getKeys(OCPUser user, Pointer pointer) throws Exception {
   Key pointerKey = new Key(pointer.getBytes());
   Data data = (Data) get(pointerKey);
   if (data == null) {
     throw new Exception("Cannot get keys for pointer " + pointer);
   }
   byte[] ciphertext = data.getContent();
   byte[] cleartext = user.decrypt(ciphertext);
   Key[] keys = (Key[]) ds().serializer.deserialize(cleartext);
   return keys;
 }
示例#5
0
文件: OCPAgent.java 项目: ccbon/ocp
  public byte[] getBytes(OCPUser user, Pointer pointer) throws Exception {
    // 1) retrieve the key list from pointer
    Key[] keys = getKeys(user, pointer);
    // 2) from each key retrieve the object
    if (keys.length != user.getBackupNbr()) {
      throw new Exception("nbr of keys different from user backup nbr.");
    }
    byte[] result = null;
    // TODO : check if all bkp are identical and repair if necessary
    for (int i = 0; i < keys.length; i++) {
      Data data = (Data) get(keys[i]);
      if (data != null) {
        byte[] ciphertext = data.getContent();
        byte[] cleartext = user.decrypt(ciphertext);
        result = ByteUtil.sub(cleartext, 1);

        break;
      }
    }
    return result;
  }
示例#6
0
文件: OCPAgent.java 项目: ccbon/ocp
 public void remove(OCPUser user, Key key) throws Exception {
   if (isLink(key)) {
     Link link = getLink(key);
     remove(user, link.getTargetKey());
   }
   // remove the address corresponding to the key.
   Address[] address = getAddressList(key);
   for (byte i = 0; i < address.length; i++) {
     // sign the address
     byte[] addressSignature = user.sign(this, address[i].getBytes());
     remove(address[i], addressSignature);
   }
 }
示例#7
0
文件: OCPAgent.java 项目: ccbon/ocp
 private Pointer makePointer(OCPUser user, Key[] keys) throws Exception {
   Data data = new Data(this, user, user.crypt(ds().serializer.serialize(keys)));
   Pointer pointer = new Pointer(set(data).getBytes());
   return pointer;
 }