Java 类org.apache.hadoop.hbase.io.crypto.Encryption 实例源码

项目:ditb    文件:EncryptionTest.java   
/**
 * Check that the configured key provider can be loaded and initialized, or
 * throw an exception.
 *
 * @param conf
 * @throws IOException
 */
public static void testKeyProvider(final Configuration conf) throws IOException {
  String providerClassName = conf.get(HConstants.CRYPTO_KEYPROVIDER_CONF_KEY,
    KeyStoreKeyProvider.class.getName());
  Boolean result = keyProviderResults.get(providerClassName);
  if (result == null) {
    try {
      Encryption.getKeyProvider(conf);
      keyProviderResults.put(providerClassName, true);
    } catch (Exception e) { // most likely a RuntimeException
      keyProviderResults.put(providerClassName, false);
      throw new IOException("Key provider " + providerClassName + " failed test: " +
        e.getMessage(), e);
    }
  } else if (result.booleanValue() == false) {
    throw new IOException("Key provider " + providerClassName + " previously failed test");
  }
}
项目:ditb    文件:EncryptionTest.java   
/**
 * Check that the configured cipher provider can be loaded and initialized, or
 * throw an exception.
 *
 * @param conf
 * @throws IOException
 */
public static void testCipherProvider(final Configuration conf) throws IOException {
  String providerClassName = conf.get(HConstants.CRYPTO_CIPHERPROVIDER_CONF_KEY,
    DefaultCipherProvider.class.getName());
  Boolean result = cipherProviderResults.get(providerClassName);
  if (result == null) {
    try {
      Encryption.getCipherProvider(conf);
      cipherProviderResults.put(providerClassName, true);
    } catch (Exception e) { // most likely a RuntimeException
      cipherProviderResults.put(providerClassName, false);
      throw new IOException("Cipher provider " + providerClassName + " failed test: " +
        e.getMessage(), e);
    }
  } else if (result.booleanValue() == false) {
    throw new IOException("Cipher provider " + providerClassName + " previously failed test");
  }
}
项目:ditb    文件:HFilePerformanceEvaluation.java   
@Override
void setUp() throws Exception {

  HFileContextBuilder builder = new HFileContextBuilder()
      .withCompression(AbstractHFileWriter.compressionByName(codec))
      .withBlockSize(RFILE_BLOCKSIZE);

  if (cipher == "aes") {
    byte[] cipherKey = new byte[AES.KEY_LENGTH];
    new SecureRandom().nextBytes(cipherKey);
    builder.withEncryptionContext(Encryption.newContext(conf)
        .setCipher(Encryption.getCipher(conf, cipher))
        .setKey(cipherKey));
  } else if (!"none".equals(cipher)) {
    throw new IOException("Cipher " + cipher + " not supported.");
  }

  HFileContext hFileContext = builder.build();

  writer = HFile.getWriterFactoryNoCache(conf)
      .withPath(fs, mf)
      .withFileContext(hFileContext)
      .withComparator(new KeyValue.RawBytesComparator())
      .create();
}
项目:ditb    文件:LoadTestTool.java   
private void parseColumnFamilyOptions(CommandLine cmd) {
  String dataBlockEncodingStr = cmd.getOptionValue(OPT_DATA_BLOCK_ENCODING);
  dataBlockEncodingAlgo = dataBlockEncodingStr == null ? null :
      DataBlockEncoding.valueOf(dataBlockEncodingStr);

  String compressStr = cmd.getOptionValue(OPT_COMPRESSION);
  compressAlgo = compressStr == null ? Compression.Algorithm.NONE :
      Compression.Algorithm.valueOf(compressStr);

  String bloomStr = cmd.getOptionValue(OPT_BLOOM);
  bloomType = bloomStr == null ? BloomType.ROW :
      BloomType.valueOf(bloomStr);

  inMemoryCF = cmd.hasOption(OPT_INMEMORY);
  if (cmd.hasOption(OPT_ENCRYPTION)) {
    cipher = Encryption.getCipher(conf, cmd.getOptionValue(OPT_ENCRYPTION));
  }

}
项目:ditb    文件:TestEncryptionRandomKeying.java   
private static byte[] extractHFileKey(Path path) throws Exception {
  HFile.Reader reader = HFile.createReader(TEST_UTIL.getTestFileSystem(), path,
    new CacheConfig(conf), conf);
  try {
    reader.loadFileInfo();
    Encryption.Context cryptoContext = reader.getFileContext().getEncryptionContext();
    assertNotNull("Reader has a null crypto context", cryptoContext);
    Key key = cryptoContext.getKey();
    if (key == null) {
      return null;
    }
    return key.getEncoded();
  } finally {
    reader.close();
  }
}
项目:ditb    文件:TestHFileEncryption.java   
@BeforeClass
public static void setUp() throws Exception {
  Configuration conf = TEST_UTIL.getConfiguration();
  // Disable block cache in this test.
  conf.setFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, 0.0f);
  conf.set(HConstants.CRYPTO_KEYPROVIDER_CONF_KEY, KeyProviderForTesting.class.getName());
  conf.set(HConstants.CRYPTO_MASTERKEY_NAME_CONF_KEY, "hbase");
  conf.setInt("hfile.format.version", 3);

  fs = FileSystem.get(conf);

  cryptoContext = Encryption.newContext(conf);
  String algorithm =
      conf.get(HConstants.CRYPTO_KEY_ALGORITHM_CONF_KEY, HConstants.CIPHER_AES);
  Cipher aes = Encryption.getCipher(conf, algorithm);
  assertNotNull(aes);
  cryptoContext.setCipher(aes);
  byte[] key = new byte[aes.getKeyLength()];
  RNG.nextBytes(key);
  cryptoContext.setKey(key);
}
项目:ditb    文件:HFileContext.java   
public HFileContext(boolean useHBaseChecksum, boolean includesMvcc, boolean includesTags,
    Compression.Algorithm compressAlgo, boolean compressTags, ChecksumType checksumType,
    int bytesPerChecksum, int blockSize, DataBlockEncoding encoding,
    Encryption.Context cryptoContext, long fileCreateTime) {
  this.usesHBaseChecksum = useHBaseChecksum;
  this.includesMvcc =  includesMvcc;
  this.includesTags = includesTags;
  this.compressAlgo = compressAlgo;
  this.compressTags = compressTags;
  this.checksumType = checksumType;
  this.bytesPerChecksum = bytesPerChecksum;
  this.blocksize = blockSize;
  if (encoding != null) {
    this.encoding = encoding;
  }
  this.cryptoContext = cryptoContext;
  this.fileCreateTime = fileCreateTime;
}
项目:pbase    文件:EncryptionTest.java   
/**
 * Check that the configured key provider can be loaded and initialized, or
 * throw an exception.
 *
 * @param conf
 * @throws IOException
 */
public static void testKeyProvider(final Configuration conf) throws IOException {
  String providerClassName = conf.get(HConstants.CRYPTO_KEYPROVIDER_CONF_KEY,
    KeyStoreKeyProvider.class.getName());
  Boolean result = keyProviderResults.get(providerClassName);
  if (result == null) {
    try {
      Encryption.getKeyProvider(conf);
      keyProviderResults.put(providerClassName, true);
    } catch (Exception e) { // most likely a RuntimeException
      keyProviderResults.put(providerClassName, false);
      throw new IOException("Key provider " + providerClassName + " failed test: " +
        e.getMessage(), e);
    }
  } else if (result.booleanValue() == false) {
    throw new IOException("Key provider " + providerClassName + " previously failed test");
  }
}
项目:pbase    文件:EncryptionTest.java   
/**
 * Check that the configured cipher provider can be loaded and initialized, or
 * throw an exception.
 *
 * @param conf
 * @throws IOException
 */
public static void testCipherProvider(final Configuration conf) throws IOException {
  String providerClassName = conf.get(HConstants.CRYPTO_CIPHERPROVIDER_CONF_KEY,
    DefaultCipherProvider.class.getName());
  Boolean result = cipherProviderResults.get(providerClassName);
  if (result == null) {
    try {
      Encryption.getCipherProvider(conf);
      cipherProviderResults.put(providerClassName, true);
    } catch (Exception e) { // most likely a RuntimeException
      cipherProviderResults.put(providerClassName, false);
      throw new IOException("Cipher provider " + providerClassName + " failed test: " +
        e.getMessage(), e);
    }
  } else if (result.booleanValue() == false) {
    throw new IOException("Cipher provider " + providerClassName + " previously failed test");
  }
}
项目:pbase    文件:HStore.java   
private HFileContext createFileContext(Compression.Algorithm compression,
                                       boolean includeMVCCReadpoint, boolean includesTag, Encryption.Context cryptoContext) {
    if (compression == null) {
        compression = HFile.DEFAULT_COMPRESSION_ALGORITHM;
    }
    HFileContext hFileContext = new HFileContextBuilder()
            .withIncludesMvcc(includeMVCCReadpoint)
            .withIncludesTags(includesTag)
            .withCompression(compression)
            .withCompressTags(family.isCompressTags())
            .withChecksumType(checksumType)
            .withBytesPerCheckSum(bytesPerChecksum)
            .withBlockSize(blocksize)
            .withHBaseCheckSum(true)
            .withDataBlockEncoding(family.getDataBlockEncoding())
            .withEncryptionContext(cryptoContext)
            .build();
    return hFileContext;
}
项目:pbase    文件:HFilePerformanceEvaluation.java   
@Override
void setUp() throws Exception {

  HFileContextBuilder builder = new HFileContextBuilder()
      .withCompression(AbstractHFileWriter.compressionByName(codec))
      .withBlockSize(RFILE_BLOCKSIZE);

  if (cipher == "aes") {
    byte[] cipherKey = new byte[AES.KEY_LENGTH];
    new SecureRandom().nextBytes(cipherKey);
    builder.withEncryptionContext(Encryption.newContext(conf)
        .setCipher(Encryption.getCipher(conf, cipher))
        .setKey(cipherKey));
  } else if (!"none".equals(cipher)) {
    throw new IOException("Cipher " + cipher + " not supported.");
  }

  HFileContext hFileContext = builder.build();

  writer = HFile.getWriterFactoryNoCache(conf)
      .withPath(fs, mf)
      .withFileContext(hFileContext)
      .withComparator(new KeyValue.RawBytesComparator())
      .create();
}
项目:pbase    文件:LoadTestTool.java   
private void parseColumnFamilyOptions(CommandLine cmd) {
  String dataBlockEncodingStr = cmd.getOptionValue(OPT_DATA_BLOCK_ENCODING);
  dataBlockEncodingAlgo = dataBlockEncodingStr == null ? null :
      DataBlockEncoding.valueOf(dataBlockEncodingStr);

  String compressStr = cmd.getOptionValue(OPT_COMPRESSION);
  compressAlgo = compressStr == null ? Compression.Algorithm.NONE :
      Compression.Algorithm.valueOf(compressStr);

  String bloomStr = cmd.getOptionValue(OPT_BLOOM);
  bloomType = bloomStr == null ? BloomType.ROW :
      BloomType.valueOf(bloomStr);

  inMemoryCF = cmd.hasOption(OPT_INMEMORY);
  if (cmd.hasOption(OPT_ENCRYPTION)) {
    cipher = Encryption.getCipher(conf, cmd.getOptionValue(OPT_ENCRYPTION));
  }

}
项目:pbase    文件:TestEncryptionRandomKeying.java   
private static byte[] extractHFileKey(Path path) throws Exception {
  HFile.Reader reader = HFile.createReader(TEST_UTIL.getTestFileSystem(), path,
    new CacheConfig(conf), conf);
  try {
    reader.loadFileInfo();
    Encryption.Context cryptoContext = reader.getFileContext().getEncryptionContext();
    assertNotNull("Reader has a null crypto context", cryptoContext);
    Key key = cryptoContext.getKey();
    if (key == null) {
      return null;
    }
    return key.getEncoded();
  } finally {
    reader.close();
  }
}
项目:pbase    文件:TestHFileEncryption.java   
@BeforeClass
public static void setUp() throws Exception {
  Configuration conf = TEST_UTIL.getConfiguration();
  conf.set(HConstants.CRYPTO_KEYPROVIDER_CONF_KEY, KeyProviderForTesting.class.getName());
  conf.set(HConstants.CRYPTO_MASTERKEY_NAME_CONF_KEY, "hbase");
  conf.setInt("hfile.format.version", 3);

  fs = FileSystem.get(conf);

  cryptoContext = Encryption.newContext(conf);
  Cipher aes = Encryption.getCipher(conf, "AES");
  assertNotNull(aes);
  cryptoContext.setCipher(aes);
  byte[] key = new byte[aes.getKeyLength()];
  RNG.nextBytes(key);
  cryptoContext.setKey(key);
}
项目:pbase    文件:EncryptionUtil.java   
/**
 * Unwrap a key by decrypting it with the secret key of the given subject.
 * The configuration must be set up correctly for key alias resolution. Keys
 * are always unwrapped using AES.
 * @param conf configuration
 * @param subject subject key alias
 * @param value the encrypted key bytes
 * @return the raw key bytes
 * @throws IOException
 * @throws KeyException
 */
public static Key unwrapKey(Configuration conf, String subject, byte[] value)
    throws IOException, KeyException {
  EncryptionProtos.WrappedKey wrappedKey = EncryptionProtos.WrappedKey.PARSER
      .parseDelimitedFrom(new ByteArrayInputStream(value));
  Cipher cipher = Encryption.getCipher(conf, "AES");
  if (cipher == null) {
    throw new RuntimeException("Algorithm 'AES' not available");
  }
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  byte[] iv = wrappedKey.hasIv() ? wrappedKey.getIv().toByteArray() : null;
  Encryption.decryptWithSubjectKey(out, wrappedKey.getData().newInput(),
    wrappedKey.getLength(), subject, conf, cipher, iv);
  byte[] keyBytes = out.toByteArray();
  if (wrappedKey.hasHash()) {
    if (!Bytes.equals(wrappedKey.getHash().toByteArray(), Encryption.hash128(keyBytes))) {
      throw new KeyException("Key was not successfully unwrapped");
    }
  }
  return new SecretKeySpec(keyBytes, wrappedKey.getAlgorithm());
}
项目:pbase    文件:HFileContext.java   
public HFileContext(boolean useHBaseChecksum, boolean includesMvcc, boolean includesTags,
    Compression.Algorithm compressAlgo, boolean compressTags, ChecksumType checksumType,
    int bytesPerChecksum, int blockSize, DataBlockEncoding encoding,
    Encryption.Context cryptoContext) {
  this.usesHBaseChecksum = useHBaseChecksum;
  this.includesMvcc =  includesMvcc;
  this.includesTags = includesTags;
  this.compressAlgo = compressAlgo;
  this.compressTags = compressTags;
  this.checksumType = checksumType;
  this.bytesPerChecksum = bytesPerChecksum;
  this.blocksize = blockSize;
  if (encoding != null) {
    this.encoding = encoding;
  }
  this.cryptoContext = cryptoContext;
}
项目:HIndex    文件:HStore.java   
private HFileContext createFileContext(Compression.Algorithm compression,
    boolean includeMVCCReadpoint, boolean includesTag, Encryption.Context cryptoContext) {
  if (compression == null) {
    compression = HFile.DEFAULT_COMPRESSION_ALGORITHM;
  }
  HFileContext hFileContext = new HFileContextBuilder()
                              .withIncludesMvcc(includeMVCCReadpoint)
                              .withIncludesTags(includesTag)
                              .withCompression(compression)
                              .withCompressTags(family.shouldCompressTags())
                              .withChecksumType(checksumType)
                              .withBytesPerCheckSum(bytesPerChecksum)
                              .withBlockSize(blocksize)
                              .withHBaseCheckSum(true)
                              .withDataBlockEncoding(family.getDataBlockEncoding())
                              .withEncryptionContext(cryptoContext)
                              .build();
  return hFileContext;
}
项目:HIndex    文件:LoadTestTool.java   
private void parseColumnFamilyOptions(CommandLine cmd) {
  String dataBlockEncodingStr = cmd.getOptionValue(OPT_DATA_BLOCK_ENCODING);
  dataBlockEncodingAlgo = dataBlockEncodingStr == null ? null :
      DataBlockEncoding.valueOf(dataBlockEncodingStr);

  String compressStr = cmd.getOptionValue(OPT_COMPRESSION);
  compressAlgo = compressStr == null ? Compression.Algorithm.NONE :
      Compression.Algorithm.valueOf(compressStr);

  String bloomStr = cmd.getOptionValue(OPT_BLOOM);
  bloomType = bloomStr == null ? null :
      BloomType.valueOf(bloomStr);

  inMemoryCF = cmd.hasOption(OPT_INMEMORY);
  if (cmd.hasOption(OPT_ENCRYPTION)) {
    cipher = Encryption.getCipher(conf, cmd.getOptionValue(OPT_ENCRYPTION));
  }
}
项目:HIndex    文件:TestEncryptionRandomKeying.java   
private static byte[] extractHFileKey(Path path) throws Exception {
  HFile.Reader reader = HFile.createReader(TEST_UTIL.getTestFileSystem(), path,
    new CacheConfig(conf), conf);
  try {
    reader.loadFileInfo();
    Encryption.Context cryptoContext = reader.getFileContext().getEncryptionContext();
    assertNotNull("Reader has a null crypto context", cryptoContext);
    Key key = cryptoContext.getKey();
    if (key == null) {
      return null;
    }
    return key.getEncoded();
  } finally {
    reader.close();
  }
}
项目:HIndex    文件:TestHFileEncryption.java   
@BeforeClass
public static void setUp() throws Exception {
  Configuration conf = TEST_UTIL.getConfiguration();
  conf.set(HConstants.CRYPTO_KEYPROVIDER_CONF_KEY, KeyProviderForTesting.class.getName());
  conf.set(HConstants.CRYPTO_MASTERKEY_NAME_CONF_KEY, "hbase");
  conf.setInt("hfile.format.version", 3);

  fs = FileSystem.get(conf);

  cryptoContext = Encryption.newContext(conf);
  Cipher aes = Encryption.getCipher(conf, "AES");
  assertNotNull(aes);
  cryptoContext.setCipher(aes);
  byte[] key = new byte[aes.getKeyLength()];
  RNG.nextBytes(key);
  cryptoContext.setKey(key);
}
项目:HIndex    文件:EncryptionUtil.java   
/**
 * Unwrap a key by decrypting it with the secret key of the given subject.
 * The configuration must be set up correctly for key alias resolution. Keys
 * are always unwrapped using AES.
 * @param conf configuration
 * @param subject subject key alias
 * @param value the encrypted key bytes
 * @return the raw key bytes
 * @throws IOException
 * @throws KeyException
 */
public static Key unwrapKey(Configuration conf, String subject, byte[] value)
    throws IOException, KeyException {
  EncryptionProtos.WrappedKey wrappedKey = EncryptionProtos.WrappedKey.PARSER
      .parseDelimitedFrom(new ByteArrayInputStream(value));
  Cipher cipher = Encryption.getCipher(conf, "AES");
  if (cipher == null) {
    throw new RuntimeException("Algorithm 'AES' not available");
  }
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  byte[] iv = wrappedKey.hasIv() ? wrappedKey.getIv().toByteArray() : null;
  Encryption.decryptWithSubjectKey(out, wrappedKey.getData().newInput(),
    wrappedKey.getLength(), subject, conf, cipher, iv);
  byte[] keyBytes = out.toByteArray();
  if (wrappedKey.hasHash()) {
    if (!Bytes.equals(wrappedKey.getHash().toByteArray(), Encryption.hash128(keyBytes))) {
      throw new KeyException("Key was not successfully unwrapped");
    }
  }
  return new SecretKeySpec(keyBytes, wrappedKey.getAlgorithm());
}
项目:HIndex    文件:HFileContext.java   
public HFileContext(boolean useHBaseChecksum, boolean includesMvcc, boolean includesTags,
    Compression.Algorithm compressAlgo, boolean compressTags, ChecksumType checksumType,
    int bytesPerChecksum, int blockSize, DataBlockEncoding encoding,
    Encryption.Context cryptoContext) {
  this.usesHBaseChecksum = useHBaseChecksum;
  this.includesMvcc =  includesMvcc;
  this.includesTags = includesTags;
  this.compressAlgo = compressAlgo;
  this.compressTags = compressTags;
  this.checksumType = checksumType;
  this.bytesPerChecksum = bytesPerChecksum;
  this.blocksize = blockSize;
  if (encoding != null) {
    this.encoding = encoding;
  }
  this.cryptoContext = cryptoContext;
}
项目:hbase    文件:EncryptionTest.java   
/**
 * Check that the configured key provider can be loaded and initialized, or
 * throw an exception.
 *
 * @param conf
 * @throws IOException
 */
public static void testKeyProvider(final Configuration conf) throws IOException {
  String providerClassName = conf.get(HConstants.CRYPTO_KEYPROVIDER_CONF_KEY,
    KeyStoreKeyProvider.class.getName());
  Boolean result = keyProviderResults.get(providerClassName);
  if (result == null) {
    try {
      Encryption.getKeyProvider(conf);
      keyProviderResults.put(providerClassName, true);
    } catch (Exception e) { // most likely a RuntimeException
      keyProviderResults.put(providerClassName, false);
      throw new IOException("Key provider " + providerClassName + " failed test: " +
        e.getMessage(), e);
    }
  } else if (result.booleanValue() == false) {
    throw new IOException("Key provider " + providerClassName + " previously failed test");
  }
}
项目:hbase    文件:EncryptionTest.java   
/**
 * Check that the configured cipher provider can be loaded and initialized, or
 * throw an exception.
 *
 * @param conf
 * @throws IOException
 */
public static void testCipherProvider(final Configuration conf) throws IOException {
  String providerClassName = conf.get(HConstants.CRYPTO_CIPHERPROVIDER_CONF_KEY,
    DefaultCipherProvider.class.getName());
  Boolean result = cipherProviderResults.get(providerClassName);
  if (result == null) {
    try {
      Encryption.getCipherProvider(conf);
      cipherProviderResults.put(providerClassName, true);
    } catch (Exception e) { // most likely a RuntimeException
      cipherProviderResults.put(providerClassName, false);
      throw new IOException("Cipher provider " + providerClassName + " failed test: " +
        e.getMessage(), e);
    }
  } else if (result.booleanValue() == false) {
    throw new IOException("Cipher provider " + providerClassName + " previously failed test");
  }
}
项目:hbase    文件:HStore.java   
private HFileContext createFileContext(Compression.Algorithm compression,
    boolean includeMVCCReadpoint, boolean includesTag, Encryption.Context cryptoContext) {
  if (compression == null) {
    compression = HFile.DEFAULT_COMPRESSION_ALGORITHM;
  }
  HFileContext hFileContext = new HFileContextBuilder()
                              .withIncludesMvcc(includeMVCCReadpoint)
                              .withIncludesTags(includesTag)
                              .withCompression(compression)
                              .withCompressTags(family.isCompressTags())
                              .withChecksumType(checksumType)
                              .withBytesPerCheckSum(bytesPerChecksum)
                              .withBlockSize(blocksize)
                              .withHBaseCheckSum(true)
                              .withDataBlockEncoding(family.getDataBlockEncoding())
                              .withEncryptionContext(cryptoContext)
                              .withCreateTime(EnvironmentEdgeManager.currentTime())
                              .build();
  return hFileContext;
}
项目:hbase    文件:HFileWriterImpl.java   
protected void finishClose(FixedFileTrailer trailer) throws IOException {
  // Write out encryption metadata before finalizing if we have a valid crypto context
  Encryption.Context cryptoContext = hFileContext.getEncryptionContext();
  if (cryptoContext != Encryption.Context.NONE) {
    // Wrap the context's key and write it as the encryption metadata, the wrapper includes
    // all information needed for decryption
    trailer.setEncryptionKey(EncryptionUtil.wrapKey(cryptoContext.getConf(),
      cryptoContext.getConf().get(HConstants.CRYPTO_MASTERKEY_NAME_CONF_KEY,
        User.getCurrent().getShortName()),
      cryptoContext.getKey()));
  }
  // Now we can finish the close
  trailer.setMetaIndexCount(metaNames.size());
  trailer.setTotalUncompressedBytes(totalUncompressedBytes+ trailer.getTrailerSize());
  trailer.setEntryCount(entryCount);
  trailer.setCompressionCodec(hFileContext.getCompression());

  long startTime = System.currentTimeMillis();
  trailer.serialize(outputStream);
  HFile.updateWriteLatency(System.currentTimeMillis() - startTime);

  if (closeOutputStream) {
    outputStream.close();
    outputStream = null;
  }
}
项目:hbase    文件:HFilePerformanceEvaluation.java   
@Override
void setUp() throws Exception {

  HFileContextBuilder builder = new HFileContextBuilder()
      .withCompression(HFileWriterImpl.compressionByName(codec))
      .withBlockSize(RFILE_BLOCKSIZE);

  if (cipher == "aes") {
    byte[] cipherKey = new byte[AES.KEY_LENGTH];
    new SecureRandom().nextBytes(cipherKey);
    builder.withEncryptionContext(Encryption.newContext(conf)
        .setCipher(Encryption.getCipher(conf, cipher))
        .setKey(cipherKey));
  } else if (!"none".equals(cipher)) {
    throw new IOException("Cipher " + cipher + " not supported.");
  }

  HFileContext hFileContext = builder.build();

  writer = HFile.getWriterFactoryNoCache(conf)
      .withPath(fs, mf)
      .withFileContext(hFileContext)
      .withComparator(CellComparator.getInstance())
      .create();
}
项目:hbase    文件:TestEncryptionRandomKeying.java   
private static byte[] extractHFileKey(Path path) throws Exception {
  HFile.Reader reader = HFile.createReader(TEST_UTIL.getTestFileSystem(), path,
    new CacheConfig(conf), true, conf);
  try {
    reader.loadFileInfo();
    Encryption.Context cryptoContext = reader.getFileContext().getEncryptionContext();
    assertNotNull("Reader has a null crypto context", cryptoContext);
    Key key = cryptoContext.getKey();
    if (key == null) {
      return null;
    }
    return key.getEncoded();
  } finally {
    reader.close();
  }
}
项目:hbase    文件:TestHFileEncryption.java   
@BeforeClass
public static void setUp() throws Exception {
  Configuration conf = TEST_UTIL.getConfiguration();
  // Disable block cache in this test.
  conf.setFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, 0.0f);
  conf.set(HConstants.CRYPTO_KEYPROVIDER_CONF_KEY, KeyProviderForTesting.class.getName());
  conf.set(HConstants.CRYPTO_MASTERKEY_NAME_CONF_KEY, "hbase");
  conf.setInt("hfile.format.version", 3);

  fs = FileSystem.get(conf);

  cryptoContext = Encryption.newContext(conf);
  String algorithm =
      conf.get(HConstants.CRYPTO_KEY_ALGORITHM_CONF_KEY, HConstants.CIPHER_AES);
  Cipher aes = Encryption.getCipher(conf, algorithm);
  assertNotNull(aes);
  cryptoContext.setCipher(aes);
  byte[] key = new byte[aes.getKeyLength()];
  RNG.nextBytes(key);
  cryptoContext.setKey(key);
}
项目:hbase    文件:LoadTestTool.java   
private void parseColumnFamilyOptions(CommandLine cmd) {
  String dataBlockEncodingStr = cmd.getOptionValue(HFileTestUtil.OPT_DATA_BLOCK_ENCODING);
  dataBlockEncodingAlgo = dataBlockEncodingStr == null ? null :
      DataBlockEncoding.valueOf(dataBlockEncodingStr);

  String compressStr = cmd.getOptionValue(OPT_COMPRESSION);
  compressAlgo = compressStr == null ? Compression.Algorithm.NONE :
      Compression.Algorithm.valueOf(compressStr);

  String bloomStr = cmd.getOptionValue(OPT_BLOOM);
  bloomType = bloomStr == null ? BloomType.ROW :
      BloomType.valueOf(bloomStr);

  inMemoryCF = cmd.hasOption(OPT_INMEMORY);
  if (cmd.hasOption(OPT_ENCRYPTION)) {
    cipher = Encryption.getCipher(conf, cmd.getOptionValue(OPT_ENCRYPTION));
  }

}
项目:hbase    文件:HFileContext.java   
HFileContext(boolean useHBaseChecksum, boolean includesMvcc, boolean includesTags,
    Compression.Algorithm compressAlgo, boolean compressTags, ChecksumType checksumType,
    int bytesPerChecksum, int blockSize, DataBlockEncoding encoding,
    Encryption.Context cryptoContext, long fileCreateTime, String hfileName) {
  this.usesHBaseChecksum = useHBaseChecksum;
  this.includesMvcc =  includesMvcc;
  this.includesTags = includesTags;
  this.compressAlgo = compressAlgo;
  this.compressTags = compressTags;
  this.checksumType = checksumType;
  this.bytesPerChecksum = bytesPerChecksum;
  this.blocksize = blockSize;
  if (encoding != null) {
    this.encoding = encoding;
  }
  this.cryptoContext = cryptoContext;
  this.fileCreateTime = fileCreateTime;
  this.hfileName = hfileName;
}
项目:PyroDB    文件:HStore.java   
private HFileContext createFileContext(Compression.Algorithm compression,
    boolean includeMVCCReadpoint, boolean includesTag, Encryption.Context cryptoContext) {
  if (compression == null) {
    compression = HFile.DEFAULT_COMPRESSION_ALGORITHM;
  }
  HFileContext hFileContext = new HFileContextBuilder()
                              .withIncludesMvcc(includeMVCCReadpoint)
                              .withIncludesTags(includesTag)
                              .withCompression(compression)
                              .withCompressTags(family.shouldCompressTags())
                              .withChecksumType(checksumType)
                              .withBytesPerCheckSum(bytesPerChecksum)
                              .withBlockSize(blocksize)
                              .withHBaseCheckSum(true)
                              .withDataBlockEncoding(family.getDataBlockEncoding())
                              .withEncryptionContext(cryptoContext)
                              .build();
  return hFileContext;
}
项目:PyroDB    文件:LoadTestTool.java   
private void parseColumnFamilyOptions(CommandLine cmd) {
  String dataBlockEncodingStr = cmd.getOptionValue(OPT_DATA_BLOCK_ENCODING);
  dataBlockEncodingAlgo = dataBlockEncodingStr == null ? null :
      DataBlockEncoding.valueOf(dataBlockEncodingStr);

  String compressStr = cmd.getOptionValue(OPT_COMPRESSION);
  compressAlgo = compressStr == null ? Compression.Algorithm.NONE :
      Compression.Algorithm.valueOf(compressStr);

  String bloomStr = cmd.getOptionValue(OPT_BLOOM);
  bloomType = bloomStr == null ? null :
      BloomType.valueOf(bloomStr);

  inMemoryCF = cmd.hasOption(OPT_INMEMORY);
  if (cmd.hasOption(OPT_ENCRYPTION)) {
    cipher = Encryption.getCipher(conf, cmd.getOptionValue(OPT_ENCRYPTION));
  }
}
项目:PyroDB    文件:TestEncryptionRandomKeying.java   
private static byte[] extractHFileKey(Path path) throws Exception {
  HFile.Reader reader = HFile.createReader(TEST_UTIL.getTestFileSystem(), path,
    new CacheConfig(conf), conf);
  try {
    reader.loadFileInfo();
    Encryption.Context cryptoContext = reader.getFileContext().getEncryptionContext();
    assertNotNull("Reader has a null crypto context", cryptoContext);
    Key key = cryptoContext.getKey();
    if (key == null) {
      return null;
    }
    return key.getEncoded();
  } finally {
    reader.close();
  }
}
项目:PyroDB    文件:TestHFileEncryption.java   
@BeforeClass
public static void setUp() throws Exception {
  Configuration conf = TEST_UTIL.getConfiguration();
  conf.set(HConstants.CRYPTO_KEYPROVIDER_CONF_KEY, KeyProviderForTesting.class.getName());
  conf.set(HConstants.CRYPTO_MASTERKEY_NAME_CONF_KEY, "hbase");
  conf.setInt("hfile.format.version", 3);

  fs = FileSystem.get(conf);

  cryptoContext = Encryption.newContext(conf);
  Cipher aes = Encryption.getCipher(conf, "AES");
  assertNotNull(aes);
  cryptoContext.setCipher(aes);
  byte[] key = new byte[aes.getKeyLength()];
  RNG.nextBytes(key);
  cryptoContext.setKey(key);
}
项目:PyroDB    文件:EncryptionUtil.java   
/**
 * Unwrap a key by decrypting it with the secret key of the given subject.
 * The configuration must be set up correctly for key alias resolution. Keys
 * are always unwrapped using AES.
 * @param conf configuration
 * @param subject subject key alias
 * @param value the encrypted key bytes
 * @return the raw key bytes
 * @throws IOException
 * @throws KeyException
 */
public static Key unwrapKey(Configuration conf, String subject, byte[] value)
    throws IOException, KeyException {
  EncryptionProtos.WrappedKey wrappedKey = EncryptionProtos.WrappedKey.PARSER
      .parseDelimitedFrom(new ByteArrayInputStream(value));
  Cipher cipher = Encryption.getCipher(conf, "AES");
  if (cipher == null) {
    throw new RuntimeException("Algorithm 'AES' not available");
  }
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  byte[] iv = wrappedKey.hasIv() ? wrappedKey.getIv().toByteArray() : null;
  Encryption.decryptWithSubjectKey(out, wrappedKey.getData().newInput(),
    wrappedKey.getLength(), subject, conf, cipher, iv);
  byte[] keyBytes = out.toByteArray();
  if (wrappedKey.hasHash()) {
    if (!Bytes.equals(wrappedKey.getHash().toByteArray(), Encryption.hash128(keyBytes))) {
      throw new KeyException("Key was not successfully unwrapped");
    }
  }
  return new SecretKeySpec(keyBytes, wrappedKey.getAlgorithm());
}
项目:PyroDB    文件:HFileContext.java   
public HFileContext(boolean useHBaseChecksum, boolean includesMvcc, boolean includesTags,
    Compression.Algorithm compressAlgo, boolean compressTags, ChecksumType checksumType,
    int bytesPerChecksum, int blockSize, DataBlockEncoding encoding,
    Encryption.Context cryptoContext) {
  this.usesHBaseChecksum = useHBaseChecksum;
  this.includesMvcc =  includesMvcc;
  this.includesTags = includesTags;
  this.compressAlgo = compressAlgo;
  this.compressTags = compressTags;
  this.checksumType = checksumType;
  this.bytesPerChecksum = bytesPerChecksum;
  this.blocksize = blockSize;
  if (encoding != null) {
    this.encoding = encoding;
  }
  this.cryptoContext = cryptoContext;
}
项目:ditb    文件:SecureProtobufLogWriter.java   
@Override
protected WALHeader buildWALHeader(Configuration conf, WALHeader.Builder builder)
    throws IOException {
  builder.setWriterClsName(SecureProtobufLogWriter.class.getSimpleName());
  if (conf.getBoolean(HConstants.ENABLE_WAL_ENCRYPTION, false)) {
    EncryptionTest.testKeyProvider(conf);
    EncryptionTest.testCipherProvider(conf);

    // Get an instance of our cipher
    final String cipherName =
        conf.get(HConstants.CRYPTO_WAL_ALGORITHM_CONF_KEY, HConstants.CIPHER_AES);
    Cipher cipher = Encryption.getCipher(conf, cipherName);
    if (cipher == null) {
      throw new RuntimeException("Cipher '" + cipherName + "' is not available");
    }

    // Generate an encryption key for this WAL
    SecureRandom rng = new SecureRandom();
    byte[] keyBytes = new byte[cipher.getKeyLength()];
    rng.nextBytes(keyBytes);
    Key key = new SecretKeySpec(keyBytes, cipher.getName());
    builder.setEncryptionKey(ByteStringer.wrap(EncryptionUtil.wrapKey(conf,
        conf.get(HConstants.CRYPTO_WAL_KEY_NAME_CONF_KEY,
            conf.get(HConstants.CRYPTO_MASTERKEY_NAME_CONF_KEY,
                User.getCurrent().getShortName())),
        key)));

    // Set up the encryptor
    encryptor = cipher.getEncryptor();
    encryptor.setKey(key);

    if (LOG.isTraceEnabled()) {
      LOG.trace("Initialized secure protobuf WAL: cipher=" + cipher.getName());
    }
  }
  builder.setCellCodecClsName(SecureWALCellCodec.class.getName());
  return super.buildWALHeader(conf, builder);
}
项目:ditb    文件:HStore.java   
private HFileContext createFileContext(Compression.Algorithm compression,
    boolean includeMVCCReadpoint, boolean includesTag, Encryption.Context cryptoContext) {
  if (compression == null) {
    compression = HFile.DEFAULT_COMPRESSION_ALGORITHM;
  }
  HFileContext hFileContext = new HFileContextBuilder().withIncludesMvcc(includeMVCCReadpoint)
      .withIncludesTags(includesTag).withCompression(compression)
      .withCompressTags(family.isCompressTags()).withChecksumType(checksumType)
      .withBytesPerCheckSum(bytesPerChecksum).withBlockSize(blocksize).withHBaseCheckSum(true)
      .withDataBlockEncoding(family.getDataBlockEncoding()).withEncryptionContext(cryptoContext)
      .withCreateTime(EnvironmentEdgeManager.currentTime()).build();
  return hFileContext;
}
项目:ditb    文件:HFileWriterV3.java   
@Override
protected void finishClose(FixedFileTrailer trailer) throws IOException {
  // Write out encryption metadata before finalizing if we have a valid crypto context
  Encryption.Context cryptoContext = hFileContext.getEncryptionContext();
  if (cryptoContext != Encryption.Context.NONE) {
    // Wrap the context's key and write it as the encryption metadata, the wrapper includes
    // all information needed for decryption
    trailer.setEncryptionKey(EncryptionUtil.wrapKey(cryptoContext.getConf(),
      cryptoContext.getConf().get(HConstants.CRYPTO_MASTERKEY_NAME_CONF_KEY,
        User.getCurrent().getShortName()),
      cryptoContext.getKey()));
  }
  // Now we can finish the close
  super.finishClose(trailer);
}