/** * * @param src * @param srcIndex * @param srcEnd * @param maxLen * @param unicode * @return read string */ public String readString ( byte[] src, int srcIndex, int srcEnd, int maxLen, boolean unicode ) { if ( unicode ) { // Unicode requires word alignment if ( ( ( srcIndex - this.headerStart ) % 2 ) != 0 ) { srcIndex++; } return Strings.fromUNIBytes(src, srcIndex, Strings.findUNITermination(src, srcIndex, maxLen)); } return Strings.fromOEMBytes(src, srcIndex, Strings.findTermination(src, srcIndex, maxLen), getConfig()); }
@Override protected int writeBytesWireFormat ( byte[] dst, int dstIndex ) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); for ( String dialect : this.dialects ) { bos.write(0x02); try { bos.write(Strings.getASCIIBytes(dialect)); } catch ( IOException e ) { throw new RuntimeCIFSException(e); } bos.write(0x0); } System.arraycopy(bos.toByteArray(), 0, dst, dstIndex, bos.size()); return bos.size(); }
/** * * @param str * @return the string as bytes (UTF16-LE) */ public static byte[] getUNIBytes ( String str ) { return getBytes(str, UNI_ENCODING); }
private static String readString ( byte[] buffer, int bufferIndex, int len ) { // this is not absolutely correct, but we assume that the header is aligned if ( ( bufferIndex % 2 ) != 0 ) { bufferIndex++; } return Strings.fromUNIBytes(buffer, bufferIndex, Strings.findUNITermination(buffer, bufferIndex, len)); }
protected int writeString ( String str, byte[] dst, int dstIndex, boolean unicode ) { int start = dstIndex; if ( unicode ) { // Unicode requires word alignment if ( ( ( dstIndex - this.headerStart ) % 2 ) != 0 ) { dst[ dstIndex++ ] = (byte) '\0'; } System.arraycopy(Strings.getUNIBytes(str), 0, dst, dstIndex, str.length() * 2); dstIndex += str.length() * 2; dst[ dstIndex++ ] = (byte) '\0'; dst[ dstIndex++ ] = (byte) '\0'; } else { byte[] b = Strings.getOEMBytes(str, this.getConfig()); System.arraycopy(b, 0, dst, dstIndex, b.length); dstIndex += b.length; dst[ dstIndex++ ] = (byte) '\0'; } return dstIndex - start; }
/** * * @param password * @return the calculated hash */ public static byte[] nTOWFv1 ( String password ) { if ( password == null ) throw new NullPointerException("Password parameter is required"); MessageDigest md4 = Crypto.getMD4(); md4.update(Strings.getUNIBytes(password)); return md4.digest(); }
bufferIndex += 2; this.shortName = Strings.fromUNIBytes(buffer, bufferIndex, shortNameLength); bufferIndex += 24; fileNameLength -= 2; str = Strings.fromUNIBytes(buffer, bufferIndex, fileNameLength); fileNameLength -= 1; str = Strings.fromOEMBytes(buffer, bufferIndex, fileNameLength, this.config);
int readScopeWireFormat ( byte[] src, int srcIndex ) { int start = srcIndex; int n; StringBuffer sb; if ( ( n = src[ srcIndex++ ] & 0xFF ) == 0 ) { this.scope = null; return 1; } sb = new StringBuffer(Strings.fromOEMBytes(src, srcIndex, n, this.config)); srcIndex += n; while ( ( n = src[ srcIndex++ ] & 0xFF ) != 0 ) { sb.append('.').append(Strings.fromOEMBytes(src, srcIndex, n, this.config)); srcIndex += n; } this.scope = sb.toString(); return srcIndex - start; }
int writeScopeWireFormat ( byte[] dst, int dstIndex ) { if ( this.scope == null ) { dst[ dstIndex ] = (byte) 0x00; return 1; } // copy new scope in dst[ dstIndex++ ] = (byte) '.'; System.arraycopy(Strings.getOEMBytes(this.scope, this.config), 0, dst, dstIndex, this.scope.length()); dstIndex += this.scope.length(); dst[ dstIndex++ ] = (byte) 0x00; // now go over scope backwards converting '.' to label length int i = dstIndex - 2; int e = i - this.scope.length(); int c = 0; do { if ( dst[ i ] == '.' ) { dst[ i ] = (byte) c; c = 0; } else { c++; } } while ( i-- > e ); return this.scope.length() + 2; }
public String dec_ndr_string () throws NdrException { align(4); int i = this.index; String val = null; int len = Encdec.dec_uint32le(this.buf, i); i += 12; if ( len != 0 ) { len--; int size = len * 2; if ( size < 0 || size > 0xFFFF ) throw new NdrException(NdrException.INVALID_CONFORMANCE); val = Strings.fromUNIBytes(this.buf, i, size); i += size + 2; } advance(i - this.index); return val; }
/** * * @param password * @return the calculated hash */ public static byte[] nTOWFv1 ( String password ) { if ( password == null ) throw new NullPointerException("Password parameter is required"); MessageDigest md4 = Crypto.getMD4(); md4.update(Strings.getUNIBytes(password)); return md4.digest(); }
private static String readString ( byte[] buffer, int bufferIndex, int len ) { // this is not absolutely correct, but we assume that the header is aligned if ( ( bufferIndex % 2 ) != 0 ) { bufferIndex++; } return Strings.fromUNIBytes(buffer, bufferIndex, Strings.findUNITermination(buffer, bufferIndex, len)); }
protected int writeString ( String str, byte[] dst, int dstIndex, boolean unicode ) { int start = dstIndex; if ( unicode ) { // Unicode requires word alignment if ( ( ( dstIndex - this.headerStart ) % 2 ) != 0 ) { dst[ dstIndex++ ] = (byte) '\0'; } System.arraycopy(Strings.getUNIBytes(str), 0, dst, dstIndex, str.length() * 2); dstIndex += str.length() * 2; dst[ dstIndex++ ] = (byte) '\0'; dst[ dstIndex++ ] = (byte) '\0'; } else { byte[] b = Strings.getOEMBytes(str, this.getConfig()); System.arraycopy(b, 0, dst, dstIndex, b.length); dstIndex += b.length; dst[ dstIndex++ ] = (byte) '\0'; } return dstIndex - start; }
bufferIndex += 2; this.shortName = Strings.fromUNIBytes(buffer, bufferIndex, shortNameLength); bufferIndex += 24; fileNameLength -= 2; str = Strings.fromUNIBytes(buffer, bufferIndex, fileNameLength); fileNameLength -= 1; str = Strings.fromOEMBytes(buffer, bufferIndex, fileNameLength, this.config);
int readScopeWireFormat ( byte[] src, int srcIndex ) { int start = srcIndex; int n; StringBuffer sb; if ( ( n = src[ srcIndex++ ] & 0xFF ) == 0 ) { this.scope = null; return 1; } sb = new StringBuffer(Strings.fromOEMBytes(src, srcIndex, n, this.config)); srcIndex += n; while ( ( n = src[ srcIndex++ ] & 0xFF ) != 0 ) { sb.append('.').append(Strings.fromOEMBytes(src, srcIndex, n, this.config)); srcIndex += n; } this.scope = sb.toString(); return srcIndex - start; }
int writeWireFormat ( byte[] dst, int dstIndex ) { // write 0x20 in first byte dst[ dstIndex ] = 0x20; byte tmp[] = Strings.getOEMBytes(this.name, this.config); int i; for ( i = 0; i < tmp.length; i++ ) { dst[ dstIndex + ( 2 * i + 1 ) ] = (byte) ( ( ( tmp[ i ] & 0xF0 ) >> 4 ) + 0x41 ); dst[ dstIndex + ( 2 * i + 2 ) ] = (byte) ( ( tmp[ i ] & 0x0F ) + 0x41 ); } for ( ; i < 15; i++ ) { dst[ dstIndex + ( 2 * i + 1 ) ] = (byte) 0x43; dst[ dstIndex + ( 2 * i + 2 ) ] = (byte) 0x41; } dst[ dstIndex + TYPE_OFFSET ] = (byte) ( ( ( this.hexCode & 0xF0 ) >> 4 ) + 0x41 ); dst[ dstIndex + TYPE_OFFSET + 1 ] = (byte) ( ( this.hexCode & 0x0F ) + 0x41 ); return SCOPE_OFFSET + writeScopeWireFormat(dst, dstIndex + SCOPE_OFFSET); }
public String dec_ndr_string () throws NdrException { align(4); int i = this.index; String val = null; int len = Encdec.dec_uint32le(this.buf, i); i += 12; if ( len != 0 ) { len--; int size = len * 2; if ( size < 0 || size > 0xFFFF ) throw new NdrException(NdrException.INVALID_CONFORMANCE); val = Strings.fromUNIBytes(this.buf, i, size); i += size + 2; } advance(i - this.index); return val; }
/** * * @param src * @param srcIndex * @param maxLen * @param unicode * @return read string */ public String readString ( byte[] src, int srcIndex, int maxLen, boolean unicode ) { if ( unicode ) { // Unicode requires word alignment if ( ( ( srcIndex - this.headerStart ) % 2 ) != 0 ) { srcIndex++; } return Strings.fromUNIBytes(src, srcIndex, Strings.findUNITermination(src, srcIndex, maxLen)); } return Strings.fromOEMBytes(src, srcIndex, Strings.findTermination(src, srcIndex, maxLen), getConfig()); }
/** * * @param domain * @param username * @param password * * @return the caclulated mac */ public static byte[] nTOWFv2 ( String domain, String username, String password ) { MessageDigest md4 = Crypto.getMD4(); md4.update(Strings.getUNIBytes(password)); MessageDigest hmac = Crypto.getHMACT64(md4.digest()); hmac.update(Strings.getUNIBytes(username.toUpperCase())); hmac.update(Strings.getUNIBytes(domain)); return hmac.digest(); }
int readWireFormat ( byte[] src, int srcIndex ) { byte tmp[] = new byte[SCOPE_OFFSET]; int length = 15; for ( int i = 0; i < 15; i++ ) { tmp[ i ] = (byte) ( ( ( src[ srcIndex + ( 2 * i + 1 ) ] & 0xFF ) - 0x41 ) << 4 ); tmp[ i ] |= (byte) ( ( ( src[ srcIndex + ( 2 * i + 2 ) ] & 0xFF ) - 0x41 ) & 0x0F ); if ( tmp[ i ] != (byte) ' ' ) { length = i + 1; } } this.name = Strings.fromOEMBytes(tmp, 0, length, this.config); this.hexCode = ( ( src[ srcIndex + TYPE_OFFSET ] & 0xFF ) - 0x41 ) << 4; this.hexCode |= ( ( src[ srcIndex + TYPE_OFFSET + 1 ] & 0xFF ) - 0x41 ) & 0x0F; return SCOPE_OFFSET + readScopeWireFormat(src, srcIndex + SCOPE_OFFSET); }