Full 160 bit for phrase confirm, stuffed with ones
This commit is contained in:
parent
3df9bea455
commit
2535ecb91f
|
@ -26,7 +26,7 @@ import java.io.InputStream;
|
|||
* general Java InputStream.
|
||||
* Like the various Stream-classes from Java, the BitInputStream
|
||||
* has to be created based on another Input stream. It provides
|
||||
* a function to read the next bit from the sream, as well as to read multiple
|
||||
* a function to read the next bit from the stream, as well as to read multiple
|
||||
* bits at once and write the resulting data into an integer value.
|
||||
* <p/>
|
||||
* source: http://developer.nokia.com/Community/Wiki/Bit_Input/Output_Stream_utility_classes_for_efficient_data_transfer
|
||||
|
@ -69,11 +69,11 @@ public class BitInputStream {
|
|||
* @return integer value containing the bits read from the stream.
|
||||
* @throws IOException
|
||||
*/
|
||||
synchronized public int readBits(final int aNumberOfBits)
|
||||
synchronized public int readBits(final int aNumberOfBits, boolean stuffIfEnd)
|
||||
throws IOException {
|
||||
int value = 0;
|
||||
for (int i = aNumberOfBits - 1; i >= 0; i--) {
|
||||
value |= (readBit() << i);
|
||||
value |= (readBit(stuffIfEnd) << i);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
@ -92,15 +92,20 @@ public class BitInputStream {
|
|||
* @return 0 if the bit is 0, 1 if the bit is 1.
|
||||
* @throws IOException
|
||||
*/
|
||||
synchronized public int readBit() throws IOException {
|
||||
synchronized public int readBit(boolean stuffIfEnd) throws IOException {
|
||||
if (iIs == null)
|
||||
throw new IOException("Already closed");
|
||||
|
||||
if (iNextBit == 8) {
|
||||
iBuffer = iIs.read();
|
||||
|
||||
if (iBuffer == -1)
|
||||
throw new EOFException();
|
||||
if (iBuffer == -1) {
|
||||
if (stuffIfEnd) {
|
||||
return 1;
|
||||
} else {
|
||||
throw new EOFException();
|
||||
}
|
||||
}
|
||||
|
||||
iNextBit = 0;
|
||||
}
|
||||
|
|
|
@ -99,8 +99,12 @@ public class SentenceConfirm {
|
|||
*/
|
||||
private EntropyString getWord(List<String> words, BitInputStream bin) throws IOException {
|
||||
final int neededBits = log(words.size(), 2);
|
||||
Log.d(Constants.TAG, "need " + neededBits + " bits of entropy");
|
||||
int bits = bin.readBits(neededBits);
|
||||
Log.d(Constants.TAG, "need: " + neededBits + " bits of entropy");
|
||||
Log.d(Constants.TAG, "available: " + bin.available() + " bits");
|
||||
if (neededBits > bin.available()) {
|
||||
Log.d(Constants.TAG, "stuffed with " + (neededBits - bin.available()) + " ones!");
|
||||
}
|
||||
int bits = bin.readBits(neededBits, true);
|
||||
Log.d(Constants.TAG, "got word " + words.get(bits) + " with " + neededBits + " bits of entropy");
|
||||
return new EntropyString(words.get(bits), neededBits);
|
||||
}
|
||||
|
@ -108,7 +112,7 @@ public class SentenceConfirm {
|
|||
private EntropyString getNounPhrase(BitInputStream bits) throws IOException {
|
||||
final EntropyString phrase = new EntropyString();
|
||||
phrase.append(getWord(art, bits)).append(" ");
|
||||
if (bits.readBit() != 0) {
|
||||
if (bits.readBit(true) != 0) {
|
||||
phrase.append(getWord(adj, bits)).append(" ");
|
||||
}
|
||||
phrase.incBits();
|
||||
|
@ -121,7 +125,7 @@ public class SentenceConfirm {
|
|||
EntropyString getSentence(BitInputStream bits) throws IOException {
|
||||
final EntropyString sentence = new EntropyString();
|
||||
sentence.append(getNounPhrase(bits)); // Subject
|
||||
if (bits.readBit() != 0) {
|
||||
if (bits.readBit(true) != 0) {
|
||||
sentence.append(" ").append(getWord(vt, bits)); // Transitive verb
|
||||
sentence.append(" ").append(getNounPhrase(bits)); // Object of transitive verb
|
||||
} else {
|
||||
|
@ -129,17 +133,17 @@ public class SentenceConfirm {
|
|||
}
|
||||
sentence.incBits();
|
||||
|
||||
if (bits.readBit() != 0) {
|
||||
if (bits.readBit(true) != 0) {
|
||||
sentence.append(" ").append(getWord(adv, bits)); // Adverb
|
||||
}
|
||||
|
||||
sentence.incBits();
|
||||
if (bits.readBit() != 0) {
|
||||
if (bits.readBit(true) != 0) {
|
||||
sentence.append(" ").append(getWord(p, bits)); // Preposition
|
||||
sentence.append(" ").append(getNounPhrase(bits)); // Object of preposition
|
||||
}
|
||||
sentence.incBits();
|
||||
Log.d(Constants.TAG, "got sentence " + sentence + " with " + sentence.getBits() + " bits of entropy");
|
||||
Log.d(Constants.TAG, "got sentence '" + sentence + "' with " + sentence.getBits() + " bits of entropy");
|
||||
|
||||
// uppercase first character, end with dot (without increasing the bits)
|
||||
sentence.getBuilder().replace(0, 1,
|
||||
|
|
|
@ -191,9 +191,10 @@ public class CertifyFingerprintFragment extends LoaderFragment implements
|
|||
|
||||
String fingerprint;
|
||||
try {
|
||||
fingerprint = new SentenceConfirm(getActivity()).fromBytes(fingerprintBlob, 16);
|
||||
} catch (IOException ioe) {
|
||||
fingerprint = new SentenceConfirm(getActivity()).fromBytes(fingerprintBlob, 20);
|
||||
} catch (IOException e) {
|
||||
fingerprint = "-";
|
||||
Log.e(Constants.TAG, "Problem when creating sentence!", e);
|
||||
}
|
||||
|
||||
mFingerprint.setTextSize(18);
|
||||
|
|
Loading…
Reference in a new issue