@Nullable
  @ReturnsMutableCopy
  public static byte[] getDecodedASCIIHex(@Nullable final byte[] aEncodedBuffer) {
    if (aEncodedBuffer == null) return null;

    final NonBlockingByteArrayOutputStream aBAOS = new NonBlockingByteArrayOutputStream();
    try {
      boolean bFirstByte = true;
      int nFirstByte = 0;
      for (final byte nEncByte : aEncodedBuffer) {
        if (nEncByte == '>') break;

        // Ignore whitespaces
        if (Character.isWhitespace(nEncByte)) continue;

        final byte nDecByte = (byte) StringHelper.getHexValue((char) nEncByte);
        if (nDecByte == CGlobal.ILLEGAL_UINT)
          throw new DecodeException(
              "Failed to convert byte '"
                  + nEncByte
                  + "/"
                  + ((char) nEncByte)
                  + "' to hex value in ASCIIHexDecode");
        if (bFirstByte) nFirstByte = nDecByte;
        else aBAOS.write((byte) (nFirstByte << 4 | nDecByte));
        bFirstByte = !bFirstByte;
      }

      // Write trailing byte
      if (!bFirstByte) aBAOS.write((byte) (nFirstByte << 4));
      return aBAOS.toByteArray();
    } finally {
      StreamHelper.close(aBAOS);
    }
  }
 public void save(@WillClose final OutputStream aOS, final char[] aPassword)
     throws OpenAS2Exception {
   try {
     final KeyStore aKeyStore = getKeyStore();
     synchronized (aKeyStore) {
       aKeyStore.store(aOS, aPassword);
     }
   } catch (final IOException ex) {
     throw WrappedOpenAS2Exception.wrap(ex);
   } catch (final GeneralSecurityException ex) {
     throw WrappedOpenAS2Exception.wrap(ex);
   } finally {
     StreamHelper.close(aOS);
   }
 }
 public void load(@Nonnull @WillClose final InputStream aIS, @Nonnull final char[] aPassword)
     throws OpenAS2Exception {
   try {
     final KeyStore aKeyStore = getKeyStore();
     synchronized (aKeyStore) {
       aKeyStore.load(aIS, aPassword);
     }
   } catch (final IOException ex) {
     throw WrappedOpenAS2Exception.wrap(ex);
   } catch (final GeneralSecurityException ex) {
     throw WrappedOpenAS2Exception.wrap(ex);
   } finally {
     StreamHelper.close(aIS);
   }
 }