From 05ff92af9fb2a85bc5f47f962d15401a3ae7babf Mon Sep 17 00:00:00 2001 From: aagarwal1012 Date: Mon, 18 Mar 2019 02:19:42 +0530 Subject: [PATCH 1/9] setup checker framework for annotations (cherry picked from commit 2c3e87bae459a567087fa11b41eedba66bf220b5) --- ImageSteganographyLibrary/build.gradle | 36 ++++++++++++++++++++++-- app/build.gradle | 4 +++ gradle/wrapper/gradle-wrapper.properties | 12 ++++---- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/ImageSteganographyLibrary/build.gradle b/ImageSteganographyLibrary/build.gradle index 882190d..784e132 100644 --- a/ImageSteganographyLibrary/build.gradle +++ b/ImageSteganographyLibrary/build.gradle @@ -22,10 +22,29 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } + + checkTypes { + javaCompileOptions.annotationProcessorOptions. + classNames.add("org.checkerframework.checker.nullness.NullnessChecker") + // You can pass options like so: + // javaCompileOptions.annotationProcessorOptions.arguments.put("warns", "") + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 } } +configurations { + checkerFrameworkAnnotatedJDK { + description = 'a copy of JDK classes with Checker Framework type qualifers inserted' + } +} + + configurations.all { resolutionStrategy { force 'com.android.support:support-annotations:23.1.1' @@ -33,10 +52,23 @@ configurations.all { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - + implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support:appcompat-v7:26.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + ext.checkerFrameworkVersion = '2.7.0' + implementation "org.checkerframework:checker-qual:${checkerFrameworkVersion}" + annotationProcessor "org.checkerframework:checker:${checkerFrameworkVersion}" + checkerFrameworkAnnotatedJDK "org.checkerframework:jdk8:${checkerFrameworkVersion}" } + +gradle.projectsEvaluated { + tasks.withType(JavaCompile).all { compile -> + if (compile.name.contains("checkTypes")) { + compile.options.compilerArgs += [ + "-Xbootclasspath/p:${configurations.checkerFrameworkAnnotatedJDK.asPath}" + ] + } + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7bd537b..86d0090 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,6 +18,10 @@ android { } } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } } configurations.all { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2c134a1..3d238fc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon May 07 21:22:54 IST 2018 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +#Mon Mar 18 01:09:02 IST 2019 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip From 9b8930f808450d4ef4e61b973963a6347be2c7a9 Mon Sep 17 00:00:00 2001 From: aagarwal1012 Date: Tue, 19 Mar 2019 16:16:12 +0530 Subject: [PATCH 2/9] annotated text encoding and decoding interfaces --- .../Text/AsyncTaskCallback/TextDecodingCallback.java | 3 +++ .../Text/AsyncTaskCallback/TextEncodingCallback.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java index f257565..8f0a224 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java @@ -2,6 +2,8 @@ import com.ayush.imagesteganographylibrary.Text.ImageSteganography; +import org.checkerframework.checker.nullness.qual.RequiresNonNull; + /** * This the callback interface for TextDecoding AsyncTask. */ @@ -10,6 +12,7 @@ public interface TextDecodingCallback { void onStartTextEncoding(); + @RequiresNonNull("result") void onCompleteTextEncoding(ImageSteganography result); } diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java index 3d65d24..429035b 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java @@ -2,6 +2,8 @@ import com.ayush.imagesteganographylibrary.Text.ImageSteganography; +import org.checkerframework.checker.nullness.qual.RequiresNonNull; + /** * This the callback interface for TextEncoding AsyncTask. */ @@ -10,6 +12,7 @@ public interface TextEncodingCallback { void onStartTextEncoding(); + @RequiresNonNull("result") void onCompleteTextEncoding(ImageSteganography result); } From 681059278304df262eefcc73e8305406f029f95b Mon Sep 17 00:00:00 2001 From: aagarwal1012 Date: Tue, 19 Mar 2019 16:25:25 +0530 Subject: [PATCH 3/9] annotated EncodeDecode class --- .../Text/EncodeDecode.java | 45 ++++++++++++++----- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java index 1ae5904..3b9c227 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java @@ -2,10 +2,15 @@ import android.graphics.Bitmap; import android.graphics.Color; +import android.support.annotation.Nullable; import android.util.Log; import com.ayush.imagesteganographylibrary.Utils.Utility; +import org.checkerframework.checker.nullness.qual.EnsuresNonNull; +import org.checkerframework.checker.nullness.qual.MonotonicNonNull; +import org.checkerframework.checker.nullness.qual.RequiresNonNull; + import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; @@ -32,6 +37,8 @@ class EncodeDecode { * @parameter : progressHandler {A handler interface, for the progress bar} */ + @RequiresNonNull({"integer_pixel_array", "image_columns", "image_rows", "messageEncodingStatus", "progressHandler"}) + @EnsuresNonNull("result") private static byte[] encodeMessage(int[] integer_pixel_array, int image_columns, int image_rows, MessageEncodingStatus messageEncodingStatus, ProgressHandler progressHandler) { @@ -105,8 +112,10 @@ private static byte[] encodeMessage(int[] integer_pixel_array, int image_columns * @parameter : encrypted_message {string} * @parameter : progressHandler {Progress bar handler} */ + @RequiresNonNull({"splitted_images", "encrypted_message"}) + @EnsuresNonNull("result") public static List encodeMessage(List splitted_images, - String encrypted_message, ProgressHandler progressHandler) { + String encrypted_message, @Nullable ProgressHandler progressHandler) { //Making result method @@ -191,8 +200,9 @@ public static List encodeMessage(List splitted_images, * @parameter : image_rows {Image height} * @parameter : messageDecodingStatus {object} */ - private static void decodeMessage(byte[] byte_pixel_array, int image_columns, - int image_rows, MessageDecodingStatus messageDecodingStatus) { + @RequiresNonNull({"byte_pixel_array", "messageDecodingStatus"}) + private static void decodeMessage(byte[] byte_pixel_array, @Nullable int image_columns, + @Nullable int image_rows, MessageDecodingStatus messageDecodingStatus) { //encrypted message Vector byte_encrypted_message = new Vector<>(); @@ -279,7 +289,10 @@ private static void decodeMessage(byte[] byte_pixel_array, int image_columns, * @parameter : encodedImages {list of encode chunk images} */ - public static String decodeMessage(List encodedImages) { + @RequiresNonNull("encodedImages") + @EnsuresNonNull("messageDecodingStatus") + public static @Nullable + String decodeMessage(List encodedImages) { //Creating object MessageDecodingStatus messageDecodingStatus = new MessageDecodingStatus(); @@ -309,7 +322,8 @@ public static String decodeMessage(List encodedImages) { * @return : The number of pixel {integer} * @parameter : message {Message to encode} */ - public static int numberOfPixelForMessage(String message) { + @EnsuresNonNull("result") + public static int numberOfPixelForMessage(@Nullable String message) { int result = -1; if (message != null) { message += END_MESSAGE_COSTANT; @@ -323,8 +337,10 @@ public static int numberOfPixelForMessage(String message) { //Progress handler class public interface ProgressHandler { + @RequiresNonNull("tot") void setTotal(int tot); + @RequiresNonNull("inc") void increment(int inc); void finished(); @@ -332,14 +348,15 @@ public interface ProgressHandler { private static class MessageDecodingStatus { - private String message; - private boolean ended; + private @MonotonicNonNull String message; + private @MonotonicNonNull boolean ended; MessageDecodingStatus() { message = ""; ended = false; } + @EnsuresNonNull("ended") boolean isEnded() { return ended; } @@ -348,10 +365,12 @@ void setEnded() { this.ended = true; } + @EnsuresNonNull("message") String getMessage() { return message; } + @RequiresNonNull("message") void setMessage(String message) { this.message = message; } @@ -360,11 +379,12 @@ void setMessage(String message) { } private static class MessageEncodingStatus { - private boolean messageEncoded; - private int currentMessageIndex; - private byte[] byteArrayMessage; - private String message; + private @MonotonicNonNull boolean messageEncoded; + private @MonotonicNonNull int currentMessageIndex; + private @MonotonicNonNull byte[] byteArrayMessage; + private @MonotonicNonNull String message; + @RequiresNonNull({"byteArrayMessage", "message"}) MessageEncodingStatus(byte[] byteArrayMessage, String message) { this.messageEncoded = false; this.currentMessageIndex = 0; @@ -380,6 +400,7 @@ public String getMessage() { return message; } + @RequiresNonNull("message") public void setMessage(String message) { this.message = message; } @@ -396,6 +417,7 @@ int getCurrentMessageIndex() { return currentMessageIndex; } + @RequiresNonNull("currentMessageIndex") public void setCurrentMessageIndex(int currentMessageIndex) { this.currentMessageIndex = currentMessageIndex; } @@ -404,6 +426,7 @@ byte[] getByteArrayMessage() { return byteArrayMessage; } + @RequiresNonNull("byteArrayMessage") public void setByteArrayMessage(byte[] byteArrayMessage) { this.byteArrayMessage = byteArrayMessage; } From c42dd6f9b382156847d390d7f041787cc5f73721 Mon Sep 17 00:00:00 2001 From: aagarwal1012 Date: Tue, 19 Mar 2019 16:36:07 +0530 Subject: [PATCH 4/9] annotated ImageSteganography class --- .../Text/ImageSteganography.java | 42 ++++++++++++++----- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java index e8bfdcf..6ca4010 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java @@ -6,6 +6,11 @@ import com.ayush.imagesteganographylibrary.Utils.Crypto; import com.ayush.imagesteganographylibrary.Utils.Utility; +import org.checkerframework.checker.nullness.qual.EnsuresNonNull; +import org.checkerframework.checker.nullness.qual.MonotonicNonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.checkerframework.checker.nullness.qual.RequiresNonNull; + /** * This main class of the text steganography */ @@ -14,15 +19,15 @@ public class ImageSteganography { //Tag for Log private static final String TAG = ImageSteganography.class.getName(); - private String message; - private String secret_key; - private String encrypted_message; - private Bitmap image; - private Bitmap encoded_image; - private byte[] encrypted_zip; - private Boolean encoded; - private Boolean decoded; - private Boolean secretKeyWrong; + private @MonotonicNonNull String message; + private @MonotonicNonNull String secret_key; + private @MonotonicNonNull String encrypted_message; + private @MonotonicNonNull Bitmap image; + private @MonotonicNonNull Bitmap encoded_image; + private @MonotonicNonNull byte[] encrypted_zip; + private @MonotonicNonNull Boolean encoded; + private @MonotonicNonNull Boolean decoded; + private @MonotonicNonNull Boolean secretKeyWrong; public ImageSteganography() { this.encoded = false; @@ -36,6 +41,7 @@ public ImageSteganography() { this.encrypted_zip = new byte[0]; } + @RequiresNonNull({"message", "secret_key", "image"}) public ImageSteganography(String message, String secret_key, Bitmap image) { this.message = message; @@ -58,6 +64,7 @@ public ImageSteganography(String message, String secret_key, Bitmap image) { } + @RequiresNonNull({"secret_key", "image"}) public ImageSteganography(String secret_key, Bitmap image) { this.secret_key = convertKeyTo128bit(secret_key); this.image = image; @@ -72,7 +79,8 @@ public ImageSteganography(String secret_key, Bitmap image) { this.encrypted_zip = new byte[0]; } - private static String encryptMessage(String message, String secret_key) { + @EnsuresNonNull("encrypted_message") + private static String encryptMessage(@Nullable String message, @Nullable String secret_key) { Log.d(TAG, "Message : " + message); String encrypted_message = ""; @@ -93,7 +101,8 @@ private static String encryptMessage(String message, String secret_key) { return encrypted_message; } - public static String decryptMessage(String message, String secret_key) { + @EnsuresNonNull("decrypted_message") + public static String decryptMessage(@Nullable String message, @Nullable String secret_key) { String decrypted_message = ""; if (message != null) { if (!Utility.isStringEmpty(secret_key)) { @@ -110,6 +119,8 @@ public static String decryptMessage(String message, String secret_key) { return decrypted_message; } + @RequiresNonNull("secret_key") + @EnsuresNonNull("result") private static String convertKeyTo128bit(String secret_key) { StringBuilder result = new StringBuilder(secret_key); @@ -131,6 +142,7 @@ public Bitmap getEncoded_image() { return encoded_image; } + @RequiresNonNull("encoded_image") public void setEncoded_image(Bitmap encoded_image) { this.encoded_image = encoded_image; } @@ -139,6 +151,7 @@ public String getMessage() { return message; } + @RequiresNonNull("message") public void setMessage(String message) { this.message = message; } @@ -147,6 +160,7 @@ public String getSecret_key() { return secret_key; } + @RequiresNonNull("secret_key") public void setSecret_key(String secret_key) { this.secret_key = secret_key; } @@ -155,6 +169,7 @@ public byte[] getEncrypted_zip() { return encrypted_zip; } + @RequiresNonNull("encrypted_zip") public void setEncrypted_zip(byte[] encrypted_zip) { this.encrypted_zip = encrypted_zip; } @@ -163,6 +178,7 @@ public String getEncrypted_message() { return encrypted_message; } + @RequiresNonNull("encrypted_message") public void setEncrypted_message(String encrypted_message) { this.encrypted_message = encrypted_message; } @@ -171,6 +187,7 @@ public Bitmap getImage() { return image; } + @RequiresNonNull("image") public void setImage(Bitmap image) { this.image = image; } @@ -179,6 +196,7 @@ public Boolean isEncoded() { return encoded; } + @RequiresNonNull("encoded") public void setEncoded(Boolean encoded) { this.encoded = encoded; } @@ -187,6 +205,7 @@ public Boolean isDecoded() { return decoded; } + @RequiresNonNull("decoded") public void setDecoded(Boolean decoded) { this.decoded = decoded; } @@ -195,6 +214,7 @@ public Boolean isSecretKeyWrong() { return secretKeyWrong; } + @RequiresNonNull("secretKeyWrong") public void setSecretKeyWrong(Boolean secretKeyWrong) { this.secretKeyWrong = secretKeyWrong; } From 769856bebf552430d7e81afbecf7ffd720732ffd Mon Sep 17 00:00:00 2001 From: aagarwal1012 Date: Tue, 19 Mar 2019 16:45:35 +0530 Subject: [PATCH 5/9] annotated TextEncoding and TextDecoding classes --- .../Text/TextDecoding.java | 15 +++++++++++---- .../Text/TextEncoding.java | 13 +++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java index 9dc0be4..c9c1186 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java @@ -9,6 +9,11 @@ import com.ayush.imagesteganographylibrary.Text.AsyncTaskCallback.TextDecodingCallback; import com.ayush.imagesteganographylibrary.Utils.Utility; +import org.checkerframework.checker.nullness.qual.EnsuresNonNull; +import org.checkerframework.checker.nullness.qual.MonotonicNonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.checkerframework.checker.nullness.qual.RequiresNonNull; + import java.util.List; /** @@ -20,12 +25,13 @@ public class TextDecoding extends AsyncTask Date: Tue, 19 Mar 2019 18:06:18 +0530 Subject: [PATCH 6/9] annotated Utils classes --- .../Utils/Crypto.java | 4 ++++ .../Utils/Utility.java | 20 ++++++++++++++++++- .../Utils/Zipping.java | 6 ++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Crypto.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Crypto.java index ff9fe0c..472e37d 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Crypto.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Crypto.java @@ -2,6 +2,8 @@ import android.util.Log; +import org.checkerframework.checker.nullness.qual.RequiresNonNull; + import java.util.Arrays; import javax.crypto.Cipher; @@ -14,6 +16,7 @@ public class Crypto { @parameter : Message {String}, Secret key {String} @return : Encrypted Message {String} */ + @RequiresNonNull({"#1", "#2"}) public static String encryptMessage(String message, String secret_key) throws Exception { // Creating key and cipher @@ -42,6 +45,7 @@ public static String encryptMessage(String message, String secret_key) throws Ex @parameter : Encrypted Message {String}, Secret key {String} @return : Message {String} */ + @RequiresNonNull({"#1", "#2"}) public static String decryptMessage(String encrypted_message, String secret_key) throws Exception { Log.d("Decrypt", "message: + " + encrypted_message); diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Utility.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Utility.java index d0016c5..0cbf982 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Utility.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Utility.java @@ -5,6 +5,10 @@ import android.graphics.Paint; import android.util.Log; +import org.checkerframework.checker.nullness.qual.EnsuresNonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.checkerframework.checker.nullness.qual.RequiresNonNull; + import java.util.ArrayList; import java.util.List; @@ -23,6 +27,8 @@ public class Utility { * @return : number of Square blocks {Integer} * @parameter : number of pixels {Integer} */ + @RequiresNonNull("#1") + @EnsuresNonNull("result") public static int squareBlockNeeded(int pixels) { int result; @@ -41,6 +47,8 @@ public static int squareBlockNeeded(int pixels) { * @return : List of splitted images {List} * @parameter : Image {Bitmap} */ + @RequiresNonNull("#1") + @EnsuresNonNull("chunkedImages") public static List splitImage(Bitmap bitmap) { //For height and width of the small image chunks @@ -101,6 +109,8 @@ public static List splitImage(Bitmap bitmap) { * @return : Merged Image {Bitmap} * @parameter : List {Bitmap}, Original Height {Integer}, Original Width {Integer} */ + @RequiresNonNull({"#1", "#2", "#3"}) + @EnsuresNonNull("bitmap") public static Bitmap mergeImage(List images, int original_height, int original_width) { //Calculating number of Rows and columns of that matrix @@ -145,6 +155,8 @@ public static Bitmap mergeImage(List images, int original_height, int or * @parameter : b {the byte array} */ + @RequiresNonNull("#1") + @EnsuresNonNull("result") public static int[] byteArrayToIntArray(byte[] b) { Log.v("Size byte array", b.length + ""); @@ -176,6 +188,7 @@ public static int[] byteArrayToIntArray(byte[] b) { * @return : Integer * @parameter : b {the byte array} */ + @RequiresNonNull("#1") public static int byteArrayToInt(byte[] b) { return byteArrayToInt(b, 0); @@ -188,6 +201,8 @@ public static int byteArrayToInt(byte[] b) { * @return : Integer * @parameter : b {the byte array}, offset {integer} */ + @RequiresNonNull({"#1", "#2"}) + @EnsuresNonNull("value") private static int byteArrayToInt(byte[] b, int offset) { int value = 0x00000000; @@ -209,6 +224,8 @@ private static int byteArrayToInt(byte[] b, int offset) { * @return : byte Array representing [rgb] values. * @parameter : Integer array representing [argb] values. */ + @RequiresNonNull("#1") + @EnsuresNonNull("newarray") public static byte[] convertArray(int[] array) { byte[] newarray = new byte[array.length * 3]; @@ -230,7 +247,8 @@ public static byte[] convertArray(int[] array) { * @return : true or false {boolean} * @parameter : String */ - public static boolean isStringEmpty(String str) { + @EnsuresNonNull("result") + public static boolean isStringEmpty(@Nullable String str) { boolean result = true; if (str == null) ; diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java index fde500e..4c116c9 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java @@ -1,5 +1,8 @@ package com.ayush.imagesteganographylibrary.Utils; +import org.checkerframework.checker.nullness.qual.EnsuresNonNull; +import org.checkerframework.checker.nullness.qual.RequiresNonNull; + import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -21,6 +24,8 @@ class Zipping { @return : Compressed byte array */ + @RequiresNonNull("#1") + @EnsuresNonNull("compressed") public static byte[] compress(String string) throws Exception { ByteArrayOutputStream os = new ByteArrayOutputStream(string.length()); @@ -41,6 +46,7 @@ public static byte[] compress(String string) throws Exception { @parameter : byte array @return : Uncompressed encrypted_message {String} */ + @RequiresNonNull("#1") public static String decompress(byte[] compressed) throws Exception { ByteArrayInputStream bis = new ByteArrayInputStream(compressed); From d58b4c8535bf2ae64236e3aa7aac2edddb509ed9 Mon Sep 17 00:00:00 2001 From: aagarwal1012 Date: Wed, 20 Mar 2019 02:03:29 +0530 Subject: [PATCH 7/9] fixed checker annotation errors --- .../TextDecodingCallback.java | 2 +- .../TextEncodingCallback.java | 2 +- .../Text/EncodeDecode.java | 80 ++++++++++--------- .../Text/ImageSteganography.java | 49 +++++------- .../Text/TextDecoding.java | 14 ++-- .../Text/TextEncoding.java | 26 +++--- .../Utils/Utility.java | 13 +-- .../Utils/Zipping.java | 2 - 8 files changed, 89 insertions(+), 99 deletions(-) diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java index 8f0a224..6a3f884 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java @@ -12,7 +12,7 @@ public interface TextDecodingCallback { void onStartTextEncoding(); - @RequiresNonNull("result") + @RequiresNonNull("#1") void onCompleteTextEncoding(ImageSteganography result); } diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java index 429035b..b0067e4 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java @@ -12,7 +12,7 @@ public interface TextEncodingCallback { void onStartTextEncoding(); - @RequiresNonNull("result") + @RequiresNonNull("#1") void onCompleteTextEncoding(ImageSteganography result); } diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java index 3b9c227..ba7d31b 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java @@ -7,8 +7,6 @@ import com.ayush.imagesteganographylibrary.Utils.Utility; -import org.checkerframework.checker.nullness.qual.EnsuresNonNull; -import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.RequiresNonNull; import java.nio.charset.Charset; @@ -37,10 +35,9 @@ class EncodeDecode { * @parameter : progressHandler {A handler interface, for the progress bar} */ - @RequiresNonNull({"integer_pixel_array", "image_columns", "image_rows", "messageEncodingStatus", "progressHandler"}) - @EnsuresNonNull("result") + @RequiresNonNull({"#1", "#4"}) private static byte[] encodeMessage(int[] integer_pixel_array, int image_columns, int image_rows, - MessageEncodingStatus messageEncodingStatus, ProgressHandler progressHandler) { + MessageEncodingStatus messageEncodingStatus, @Nullable ProgressHandler progressHandler) { //denotes RGB channels int channels = 3; @@ -112,8 +109,7 @@ private static byte[] encodeMessage(int[] integer_pixel_array, int image_columns * @parameter : encrypted_message {string} * @parameter : progressHandler {Progress bar handler} */ - @RequiresNonNull({"splitted_images", "encrypted_message"}) - @EnsuresNonNull("result") + @RequiresNonNull({"#1"}) public static List encodeMessage(List splitted_images, String encrypted_message, @Nullable ProgressHandler progressHandler) { @@ -135,7 +131,9 @@ public static List encodeMessage(List splitted_images, //Progress Handler if (progressHandler != null) { - progressHandler.setTotal(encrypted_message.getBytes(Charset.forName("ISO-8859-1")).length); + //just a variable declaration, so as to remove the [contracts.precondition.not.satisfied] error. + int encryptedMessageByteArrayLength = encrypted_message.getBytes(Charset.forName("ISO-8859-1")).length; + progressHandler.setTotal(encryptedMessageByteArrayLength); } //Just a log to get the byte message length @@ -200,9 +198,9 @@ public static List encodeMessage(List splitted_images, * @parameter : image_rows {Image height} * @parameter : messageDecodingStatus {object} */ - @RequiresNonNull({"byte_pixel_array", "messageDecodingStatus"}) - private static void decodeMessage(byte[] byte_pixel_array, @Nullable int image_columns, - @Nullable int image_rows, MessageDecodingStatus messageDecodingStatus) { + @RequiresNonNull({"#1", "#4"}) + private static void decodeMessage(byte[] byte_pixel_array, int image_columns, + int image_rows, MessageDecodingStatus messageDecodingStatus) { //encrypted message Vector byte_encrypted_message = new Vector<>(); @@ -241,8 +239,9 @@ private static void decodeMessage(byte[] byte_pixel_array, @Nullable int image_c String stra = new String(temp, Charset.forName("ISO-8859-1")); - - messageDecodingStatus.setMessage(stra.substring(0, stra.length() - 1)); + // just a variable declaration, , so as to remove the [contracts.precondition.not.satisfied] error. + String straSubstring = stra.substring(0, stra.length() - 1); + messageDecodingStatus.setMessage(straSubstring); //end fixing messageDecodingStatus.setEnded(); @@ -250,13 +249,20 @@ private static void decodeMessage(byte[] byte_pixel_array, @Nullable int image_c break; } else { //just add the decoded message to the original message - messageDecodingStatus.setMessage(messageDecodingStatus.getMessage() + str); + + //Changed from source because compile error is there + //{Unexpected FlowExpression} + String temp = messageDecodingStatus.getMessage() + str; + messageDecodingStatus.setMessage(temp); //If there was no message there and only start and end message constant was there if (messageDecodingStatus.getMessage().length() == START_MESSAGE_COSTANT.length() && !START_MESSAGE_COSTANT.equals(messageDecodingStatus.getMessage())) { - messageDecodingStatus.setMessage(""); + //Changed from source because compile error is there + //{Unexpected FlowExpression} + String emptyString = ""; + messageDecodingStatus.setMessage(emptyString); messageDecodingStatus.setEnded(); break; @@ -272,9 +278,12 @@ private static void decodeMessage(byte[] byte_pixel_array, @Nullable int image_c //removing start and end constants form message try { - messageDecodingStatus.setMessage(messageDecodingStatus.getMessage().substring(START_MESSAGE_COSTANT.length(), messageDecodingStatus.getMessage() - .length() - - END_MESSAGE_COSTANT.length())); + // just the variable declarations, so as to remove the [contracts.precondition.not.satisfied] error. + String message = messageDecodingStatus.getMessage(); + int decodedMessageLength = message.length(); + String substring = message.substring(START_MESSAGE_COSTANT.length(), decodedMessageLength + - END_MESSAGE_COSTANT.length()); + messageDecodingStatus.setMessage(substring); } catch (Exception e) { e.printStackTrace(); } @@ -289,10 +298,8 @@ private static void decodeMessage(byte[] byte_pixel_array, @Nullable int image_c * @parameter : encodedImages {list of encode chunk images} */ - @RequiresNonNull("encodedImages") - @EnsuresNonNull("messageDecodingStatus") - public static @Nullable - String decodeMessage(List encodedImages) { + @RequiresNonNull("#1") + public static String decodeMessage(List encodedImages) { //Creating object MessageDecodingStatus messageDecodingStatus = new MessageDecodingStatus(); @@ -322,7 +329,6 @@ String decodeMessage(List encodedImages) { * @return : The number of pixel {integer} * @parameter : message {Message to encode} */ - @EnsuresNonNull("result") public static int numberOfPixelForMessage(@Nullable String message) { int result = -1; if (message != null) { @@ -337,10 +343,10 @@ public static int numberOfPixelForMessage(@Nullable String message) { //Progress handler class public interface ProgressHandler { - @RequiresNonNull("tot") + @RequiresNonNull("#1") void setTotal(int tot); - @RequiresNonNull("inc") + // @RequiresNonNull("#1") void increment(int inc); void finished(); @@ -348,15 +354,14 @@ public interface ProgressHandler { private static class MessageDecodingStatus { - private @MonotonicNonNull String message; - private @MonotonicNonNull boolean ended; + private String message; + private boolean ended; MessageDecodingStatus() { message = ""; ended = false; } - @EnsuresNonNull("ended") boolean isEnded() { return ended; } @@ -365,12 +370,11 @@ void setEnded() { this.ended = true; } - @EnsuresNonNull("message") String getMessage() { return message; } - @RequiresNonNull("message") + @RequiresNonNull("#1") void setMessage(String message) { this.message = message; } @@ -379,12 +383,12 @@ void setMessage(String message) { } private static class MessageEncodingStatus { - private @MonotonicNonNull boolean messageEncoded; - private @MonotonicNonNull int currentMessageIndex; - private @MonotonicNonNull byte[] byteArrayMessage; - private @MonotonicNonNull String message; + private boolean messageEncoded; + private int currentMessageIndex; + private byte[] byteArrayMessage; + private String message; - @RequiresNonNull({"byteArrayMessage", "message"}) + @RequiresNonNull({"#1", "#2"}) MessageEncodingStatus(byte[] byteArrayMessage, String message) { this.messageEncoded = false; this.currentMessageIndex = 0; @@ -400,7 +404,7 @@ public String getMessage() { return message; } - @RequiresNonNull("message") + @RequiresNonNull("#1") public void setMessage(String message) { this.message = message; } @@ -417,7 +421,7 @@ int getCurrentMessageIndex() { return currentMessageIndex; } - @RequiresNonNull("currentMessageIndex") + @RequiresNonNull("#1") public void setCurrentMessageIndex(int currentMessageIndex) { this.currentMessageIndex = currentMessageIndex; } @@ -426,7 +430,7 @@ byte[] getByteArrayMessage() { return byteArrayMessage; } - @RequiresNonNull("byteArrayMessage") + @RequiresNonNull("#1") public void setByteArrayMessage(byte[] byteArrayMessage) { this.byteArrayMessage = byteArrayMessage; } diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java index 6ca4010..e0a5b2b 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java @@ -6,9 +6,6 @@ import com.ayush.imagesteganographylibrary.Utils.Crypto; import com.ayush.imagesteganographylibrary.Utils.Utility; -import org.checkerframework.checker.nullness.qual.EnsuresNonNull; -import org.checkerframework.checker.nullness.qual.MonotonicNonNull; -import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.RequiresNonNull; /** @@ -19,15 +16,15 @@ public class ImageSteganography { //Tag for Log private static final String TAG = ImageSteganography.class.getName(); - private @MonotonicNonNull String message; - private @MonotonicNonNull String secret_key; - private @MonotonicNonNull String encrypted_message; - private @MonotonicNonNull Bitmap image; - private @MonotonicNonNull Bitmap encoded_image; - private @MonotonicNonNull byte[] encrypted_zip; - private @MonotonicNonNull Boolean encoded; - private @MonotonicNonNull Boolean decoded; - private @MonotonicNonNull Boolean secretKeyWrong; + private String message; + private String secret_key; + private String encrypted_message; + private Bitmap image; + private Bitmap encoded_image; + private byte[] encrypted_zip; + private Boolean encoded; + private Boolean decoded; + private Boolean secretKeyWrong; public ImageSteganography() { this.encoded = false; @@ -41,7 +38,7 @@ public ImageSteganography() { this.encrypted_zip = new byte[0]; } - @RequiresNonNull({"message", "secret_key", "image"}) + @RequiresNonNull({"#1", "#2", "#3"}) public ImageSteganography(String message, String secret_key, Bitmap image) { this.message = message; @@ -64,7 +61,7 @@ public ImageSteganography(String message, String secret_key, Bitmap image) { } - @RequiresNonNull({"secret_key", "image"}) + @RequiresNonNull({"#1", "#2"}) public ImageSteganography(String secret_key, Bitmap image) { this.secret_key = convertKeyTo128bit(secret_key); this.image = image; @@ -79,8 +76,7 @@ public ImageSteganography(String secret_key, Bitmap image) { this.encrypted_zip = new byte[0]; } - @EnsuresNonNull("encrypted_message") - private static String encryptMessage(@Nullable String message, @Nullable String secret_key) { + private static String encryptMessage(String message, String secret_key) { Log.d(TAG, "Message : " + message); String encrypted_message = ""; @@ -101,8 +97,7 @@ private static String encryptMessage(@Nullable String message, @Nullable String return encrypted_message; } - @EnsuresNonNull("decrypted_message") - public static String decryptMessage(@Nullable String message, @Nullable String secret_key) { + public static String decryptMessage(String message, String secret_key) { String decrypted_message = ""; if (message != null) { if (!Utility.isStringEmpty(secret_key)) { @@ -119,8 +114,7 @@ public static String decryptMessage(@Nullable String message, @Nullable String s return decrypted_message; } - @RequiresNonNull("secret_key") - @EnsuresNonNull("result") + @RequiresNonNull("#1") private static String convertKeyTo128bit(String secret_key) { StringBuilder result = new StringBuilder(secret_key); @@ -142,7 +136,7 @@ public Bitmap getEncoded_image() { return encoded_image; } - @RequiresNonNull("encoded_image") + @RequiresNonNull("#1") public void setEncoded_image(Bitmap encoded_image) { this.encoded_image = encoded_image; } @@ -151,7 +145,7 @@ public String getMessage() { return message; } - @RequiresNonNull("message") + @RequiresNonNull("#1") public void setMessage(String message) { this.message = message; } @@ -160,7 +154,7 @@ public String getSecret_key() { return secret_key; } - @RequiresNonNull("secret_key") + @RequiresNonNull("#1") public void setSecret_key(String secret_key) { this.secret_key = secret_key; } @@ -169,7 +163,7 @@ public byte[] getEncrypted_zip() { return encrypted_zip; } - @RequiresNonNull("encrypted_zip") + @RequiresNonNull("#1") public void setEncrypted_zip(byte[] encrypted_zip) { this.encrypted_zip = encrypted_zip; } @@ -178,7 +172,7 @@ public String getEncrypted_message() { return encrypted_message; } - @RequiresNonNull("encrypted_message") + @RequiresNonNull("#1") public void setEncrypted_message(String encrypted_message) { this.encrypted_message = encrypted_message; } @@ -187,7 +181,7 @@ public Bitmap getImage() { return image; } - @RequiresNonNull("image") + @RequiresNonNull("#1") public void setImage(Bitmap image) { this.image = image; } @@ -196,7 +190,6 @@ public Boolean isEncoded() { return encoded; } - @RequiresNonNull("encoded") public void setEncoded(Boolean encoded) { this.encoded = encoded; } @@ -205,7 +198,6 @@ public Boolean isDecoded() { return decoded; } - @RequiresNonNull("decoded") public void setDecoded(Boolean decoded) { this.decoded = decoded; } @@ -214,7 +206,6 @@ public Boolean isSecretKeyWrong() { return secretKeyWrong; } - @RequiresNonNull("secretKeyWrong") public void setSecretKeyWrong(Boolean secretKeyWrong) { this.secretKeyWrong = secretKeyWrong; } diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java index c9c1186..edfa445 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java @@ -9,8 +9,6 @@ import com.ayush.imagesteganographylibrary.Text.AsyncTaskCallback.TextDecodingCallback; import com.ayush.imagesteganographylibrary.Utils.Utility; -import org.checkerframework.checker.nullness.qual.EnsuresNonNull; -import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.RequiresNonNull; @@ -25,22 +23,24 @@ public class TextDecoding extends AsyncTask src_list = Utility.splitImage(bitmap); //encoding encrypted compressed message into image - - List encoded_list = EncodeDecode.encodeMessage(src_list, textStegnography.getEncrypted_message(), new EncodeDecode.ProgressHandler() { + //just a variable declaration,, so as to remove the [contracts.precondition.not.satisfied] error. + String encryptedMessage = textStegnography.getEncrypted_message(); + List encoded_list = EncodeDecode.encodeMessage(src_list, encryptedMessage, new EncodeDecode.ProgressHandler() { //Progress Handler @Override public void setTotal(int tot) { maximumProgress = tot; - progressDialog.setMax(maximumProgress); + if (progressDialog != null) { + progressDialog.setMax(maximumProgress); + } Log.d(TAG, "Total Length : " + tot); } @@ -116,7 +120,9 @@ public void increment(int inc) { @Override public void finished() { Log.d(TAG, "Message Encoding end...."); - progressDialog.setIndeterminate(true); + if (progressDialog != null) { + progressDialog.setIndeterminate(true); + } } }); diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Utility.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Utility.java index 0cbf982..3cd33ca 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Utility.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Utility.java @@ -5,7 +5,6 @@ import android.graphics.Paint; import android.util.Log; -import org.checkerframework.checker.nullness.qual.EnsuresNonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.RequiresNonNull; @@ -27,8 +26,6 @@ public class Utility { * @return : number of Square blocks {Integer} * @parameter : number of pixels {Integer} */ - @RequiresNonNull("#1") - @EnsuresNonNull("result") public static int squareBlockNeeded(int pixels) { int result; @@ -48,7 +45,6 @@ public static int squareBlockNeeded(int pixels) { * @parameter : Image {Bitmap} */ @RequiresNonNull("#1") - @EnsuresNonNull("chunkedImages") public static List splitImage(Bitmap bitmap) { //For height and width of the small image chunks @@ -109,8 +105,7 @@ public static List splitImage(Bitmap bitmap) { * @return : Merged Image {Bitmap} * @parameter : List {Bitmap}, Original Height {Integer}, Original Width {Integer} */ - @RequiresNonNull({"#1", "#2", "#3"}) - @EnsuresNonNull("bitmap") + @RequiresNonNull({"#1"}) public static Bitmap mergeImage(List images, int original_height, int original_width) { //Calculating number of Rows and columns of that matrix @@ -156,7 +151,6 @@ public static Bitmap mergeImage(List images, int original_height, int or */ @RequiresNonNull("#1") - @EnsuresNonNull("result") public static int[] byteArrayToIntArray(byte[] b) { Log.v("Size byte array", b.length + ""); @@ -201,8 +195,7 @@ public static int byteArrayToInt(byte[] b) { * @return : Integer * @parameter : b {the byte array}, offset {integer} */ - @RequiresNonNull({"#1", "#2"}) - @EnsuresNonNull("value") + @RequiresNonNull({"#1"}) private static int byteArrayToInt(byte[] b, int offset) { int value = 0x00000000; @@ -225,7 +218,6 @@ private static int byteArrayToInt(byte[] b, int offset) { * @parameter : Integer array representing [argb] values. */ @RequiresNonNull("#1") - @EnsuresNonNull("newarray") public static byte[] convertArray(int[] array) { byte[] newarray = new byte[array.length * 3]; @@ -247,7 +239,6 @@ public static byte[] convertArray(int[] array) { * @return : true or false {boolean} * @parameter : String */ - @EnsuresNonNull("result") public static boolean isStringEmpty(@Nullable String str) { boolean result = true; diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java index 4c116c9..f6eb377 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java @@ -1,6 +1,5 @@ package com.ayush.imagesteganographylibrary.Utils; -import org.checkerframework.checker.nullness.qual.EnsuresNonNull; import org.checkerframework.checker.nullness.qual.RequiresNonNull; import java.io.BufferedReader; @@ -25,7 +24,6 @@ class Zipping { */ @RequiresNonNull("#1") - @EnsuresNonNull("compressed") public static byte[] compress(String string) throws Exception { ByteArrayOutputStream os = new ByteArrayOutputStream(string.length()); From b37d5f98de28d5414685cce59b047dbbff02dbb6 Mon Sep 17 00:00:00 2001 From: aagarwal1012 Date: Wed, 3 Apr 2019 02:15:09 +0530 Subject: [PATCH 8/9] removed syntax changes from the source --- ImageSteganographyLibrary/build.gradle | 4 --- .../Text/EncodeDecode.java | 28 +++++-------------- .../Text/TextEncoding.java | 4 +-- 3 files changed, 8 insertions(+), 28 deletions(-) diff --git a/ImageSteganographyLibrary/build.gradle b/ImageSteganographyLibrary/build.gradle index 784e132..b177ab8 100644 --- a/ImageSteganographyLibrary/build.gradle +++ b/ImageSteganographyLibrary/build.gradle @@ -3,8 +3,6 @@ apply plugin: 'com.android.library' android { compileSdkVersion 26 - - defaultConfig { minSdkVersion 19 targetSdkVersion 26 @@ -13,8 +11,6 @@ android { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" - - } buildTypes { diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java index ba7d31b..cc97fd0 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java @@ -131,9 +131,7 @@ public static List encodeMessage(List splitted_images, //Progress Handler if (progressHandler != null) { - //just a variable declaration, so as to remove the [contracts.precondition.not.satisfied] error. - int encryptedMessageByteArrayLength = encrypted_message.getBytes(Charset.forName("ISO-8859-1")).length; - progressHandler.setTotal(encryptedMessageByteArrayLength); + progressHandler.setTotal(encrypted_message.getBytes(Charset.forName("ISO-8859-1")).length); } //Just a log to get the byte message length @@ -239,9 +237,7 @@ private static void decodeMessage(byte[] byte_pixel_array, int image_columns, String stra = new String(temp, Charset.forName("ISO-8859-1")); - // just a variable declaration, , so as to remove the [contracts.precondition.not.satisfied] error. - String straSubstring = stra.substring(0, stra.length() - 1); - messageDecodingStatus.setMessage(straSubstring); + messageDecodingStatus.setMessage(stra.substring(0, stra.length() - 1)); //end fixing messageDecodingStatus.setEnded(); @@ -249,20 +245,13 @@ private static void decodeMessage(byte[] byte_pixel_array, int image_columns, break; } else { //just add the decoded message to the original message - - //Changed from source because compile error is there - //{Unexpected FlowExpression} - String temp = messageDecodingStatus.getMessage() + str; - messageDecodingStatus.setMessage(temp); + messageDecodingStatus.setMessage(messageDecodingStatus.getMessage() + str); //If there was no message there and only start and end message constant was there if (messageDecodingStatus.getMessage().length() == START_MESSAGE_COSTANT.length() && !START_MESSAGE_COSTANT.equals(messageDecodingStatus.getMessage())) { - //Changed from source because compile error is there - //{Unexpected FlowExpression} - String emptyString = ""; - messageDecodingStatus.setMessage(emptyString); + messageDecodingStatus.setMessage(""); messageDecodingStatus.setEnded(); break; @@ -278,12 +267,9 @@ private static void decodeMessage(byte[] byte_pixel_array, int image_columns, //removing start and end constants form message try { - // just the variable declarations, so as to remove the [contracts.precondition.not.satisfied] error. - String message = messageDecodingStatus.getMessage(); - int decodedMessageLength = message.length(); - String substring = message.substring(START_MESSAGE_COSTANT.length(), decodedMessageLength - - END_MESSAGE_COSTANT.length()); - messageDecodingStatus.setMessage(substring); + messageDecodingStatus.setMessage(messageDecodingStatus.getMessage().substring(START_MESSAGE_COSTANT.length(), messageDecodingStatus.getMessage(). + length() + - END_MESSAGE_COSTANT.length())); } catch (Exception e) { e.printStackTrace(); } diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextEncoding.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextEncoding.java index 3f4ba7c..9a869ba 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextEncoding.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextEncoding.java @@ -98,9 +98,7 @@ protected ImageSteganography doInBackground(ImageSteganography... imageSteganogr List src_list = Utility.splitImage(bitmap); //encoding encrypted compressed message into image - //just a variable declaration,, so as to remove the [contracts.precondition.not.satisfied] error. - String encryptedMessage = textStegnography.getEncrypted_message(); - List encoded_list = EncodeDecode.encodeMessage(src_list, encryptedMessage, new EncodeDecode.ProgressHandler() { + List encoded_list = EncodeDecode.encodeMessage(src_list, textStegnography.getEncrypted_message(), new EncodeDecode.ProgressHandler() { //Progress Handler @Override From 68aa6b51b3ea6c4b7e02d64df4cf9236466864cc Mon Sep 17 00:00:00 2001 From: aagarwal1012 Date: Wed, 3 Apr 2019 02:26:17 +0530 Subject: [PATCH 9/9] commented all the @RequireNonNull annotation --- .../TextDecodingCallback.java | 2 +- .../TextEncodingCallback.java | 2 +- .../Text/EncodeDecode.java | 24 +++++++++---------- .../Text/ImageSteganography.java | 18 +++++++------- .../Text/TextDecoding.java | 4 ++-- .../Text/TextEncoding.java | 2 +- .../Utils/Crypto.java | 4 ++-- .../Utils/Utility.java | 12 +++++----- .../Utils/Zipping.java | 4 ++-- 9 files changed, 36 insertions(+), 36 deletions(-) diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java index 6a3f884..f99c9a8 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextDecodingCallback.java @@ -12,7 +12,7 @@ public interface TextDecodingCallback { void onStartTextEncoding(); - @RequiresNonNull("#1") +// @RequiresNonNull("#1") void onCompleteTextEncoding(ImageSteganography result); } diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java index b0067e4..f8f9d37 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/AsyncTaskCallback/TextEncodingCallback.java @@ -12,7 +12,7 @@ public interface TextEncodingCallback { void onStartTextEncoding(); - @RequiresNonNull("#1") +// @RequiresNonNull("#1") void onCompleteTextEncoding(ImageSteganography result); } diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java index cc97fd0..1d76d92 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/EncodeDecode.java @@ -35,7 +35,7 @@ class EncodeDecode { * @parameter : progressHandler {A handler interface, for the progress bar} */ - @RequiresNonNull({"#1", "#4"}) +// @RequiresNonNull({"#1", "#4"}) private static byte[] encodeMessage(int[] integer_pixel_array, int image_columns, int image_rows, MessageEncodingStatus messageEncodingStatus, @Nullable ProgressHandler progressHandler) { @@ -109,7 +109,7 @@ private static byte[] encodeMessage(int[] integer_pixel_array, int image_columns * @parameter : encrypted_message {string} * @parameter : progressHandler {Progress bar handler} */ - @RequiresNonNull({"#1"}) +// @RequiresNonNull({"#1"}) public static List encodeMessage(List splitted_images, String encrypted_message, @Nullable ProgressHandler progressHandler) { @@ -196,7 +196,7 @@ public static List encodeMessage(List splitted_images, * @parameter : image_rows {Image height} * @parameter : messageDecodingStatus {object} */ - @RequiresNonNull({"#1", "#4"}) +// @RequiresNonNull({"#1", "#4"}) private static void decodeMessage(byte[] byte_pixel_array, int image_columns, int image_rows, MessageDecodingStatus messageDecodingStatus) { @@ -267,8 +267,8 @@ private static void decodeMessage(byte[] byte_pixel_array, int image_columns, //removing start and end constants form message try { - messageDecodingStatus.setMessage(messageDecodingStatus.getMessage().substring(START_MESSAGE_COSTANT.length(), messageDecodingStatus.getMessage(). - length() + messageDecodingStatus.setMessage(messageDecodingStatus.getMessage().substring(START_MESSAGE_COSTANT.length(), messageDecodingStatus.getMessage() + .length() - END_MESSAGE_COSTANT.length())); } catch (Exception e) { e.printStackTrace(); @@ -284,7 +284,7 @@ private static void decodeMessage(byte[] byte_pixel_array, int image_columns, * @parameter : encodedImages {list of encode chunk images} */ - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public static String decodeMessage(List encodedImages) { //Creating object @@ -329,7 +329,7 @@ public static int numberOfPixelForMessage(@Nullable String message) { //Progress handler class public interface ProgressHandler { - @RequiresNonNull("#1") +// @RequiresNonNull("#1") void setTotal(int tot); // @RequiresNonNull("#1") @@ -360,7 +360,7 @@ String getMessage() { return message; } - @RequiresNonNull("#1") +// @RequiresNonNull("#1") void setMessage(String message) { this.message = message; } @@ -374,7 +374,7 @@ private static class MessageEncodingStatus { private byte[] byteArrayMessage; private String message; - @RequiresNonNull({"#1", "#2"}) +// @RequiresNonNull({"#1", "#2"}) MessageEncodingStatus(byte[] byteArrayMessage, String message) { this.messageEncoded = false; this.currentMessageIndex = 0; @@ -390,7 +390,7 @@ public String getMessage() { return message; } - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public void setMessage(String message) { this.message = message; } @@ -407,7 +407,7 @@ int getCurrentMessageIndex() { return currentMessageIndex; } - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public void setCurrentMessageIndex(int currentMessageIndex) { this.currentMessageIndex = currentMessageIndex; } @@ -416,7 +416,7 @@ byte[] getByteArrayMessage() { return byteArrayMessage; } - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public void setByteArrayMessage(byte[] byteArrayMessage) { this.byteArrayMessage = byteArrayMessage; } diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java index e0a5b2b..f6e14c2 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/ImageSteganography.java @@ -38,7 +38,7 @@ public ImageSteganography() { this.encrypted_zip = new byte[0]; } - @RequiresNonNull({"#1", "#2", "#3"}) +// @RequiresNonNull({"#1", "#2", "#3"}) public ImageSteganography(String message, String secret_key, Bitmap image) { this.message = message; @@ -61,7 +61,7 @@ public ImageSteganography(String message, String secret_key, Bitmap image) { } - @RequiresNonNull({"#1", "#2"}) +// @RequiresNonNull({"#1", "#2"}) public ImageSteganography(String secret_key, Bitmap image) { this.secret_key = convertKeyTo128bit(secret_key); this.image = image; @@ -114,7 +114,7 @@ public static String decryptMessage(String message, String secret_key) { return decrypted_message; } - @RequiresNonNull("#1") +// @RequiresNonNull("#1") private static String convertKeyTo128bit(String secret_key) { StringBuilder result = new StringBuilder(secret_key); @@ -136,7 +136,7 @@ public Bitmap getEncoded_image() { return encoded_image; } - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public void setEncoded_image(Bitmap encoded_image) { this.encoded_image = encoded_image; } @@ -145,7 +145,7 @@ public String getMessage() { return message; } - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public void setMessage(String message) { this.message = message; } @@ -154,7 +154,7 @@ public String getSecret_key() { return secret_key; } - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public void setSecret_key(String secret_key) { this.secret_key = secret_key; } @@ -163,7 +163,7 @@ public byte[] getEncrypted_zip() { return encrypted_zip; } - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public void setEncrypted_zip(byte[] encrypted_zip) { this.encrypted_zip = encrypted_zip; } @@ -172,7 +172,7 @@ public String getEncrypted_message() { return encrypted_message; } - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public void setEncrypted_message(String encrypted_message) { this.encrypted_message = encrypted_message; } @@ -181,7 +181,7 @@ public Bitmap getImage() { return image; } - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public void setImage(Bitmap image) { this.image = image; } diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java index edfa445..bc8ccf0 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Text/TextDecoding.java @@ -28,7 +28,7 @@ public class TextDecoding extends AsyncTask splitImage(Bitmap bitmap) { //For height and width of the small image chunks @@ -105,7 +105,7 @@ public static List splitImage(Bitmap bitmap) { * @return : Merged Image {Bitmap} * @parameter : List {Bitmap}, Original Height {Integer}, Original Width {Integer} */ - @RequiresNonNull({"#1"}) +// @RequiresNonNull({"#1"}) public static Bitmap mergeImage(List images, int original_height, int original_width) { //Calculating number of Rows and columns of that matrix @@ -150,7 +150,7 @@ public static Bitmap mergeImage(List images, int original_height, int or * @parameter : b {the byte array} */ - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public static int[] byteArrayToIntArray(byte[] b) { Log.v("Size byte array", b.length + ""); @@ -182,7 +182,7 @@ public static int[] byteArrayToIntArray(byte[] b) { * @return : Integer * @parameter : b {the byte array} */ - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public static int byteArrayToInt(byte[] b) { return byteArrayToInt(b, 0); @@ -195,7 +195,7 @@ public static int byteArrayToInt(byte[] b) { * @return : Integer * @parameter : b {the byte array}, offset {integer} */ - @RequiresNonNull({"#1"}) +// @RequiresNonNull({"#1"}) private static int byteArrayToInt(byte[] b, int offset) { int value = 0x00000000; @@ -217,7 +217,7 @@ private static int byteArrayToInt(byte[] b, int offset) { * @return : byte Array representing [rgb] values. * @parameter : Integer array representing [argb] values. */ - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public static byte[] convertArray(int[] array) { byte[] newarray = new byte[array.length * 3]; diff --git a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java index f6eb377..ac4e1db 100644 --- a/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java +++ b/ImageSteganographyLibrary/src/main/java/com/ayush/imagesteganographylibrary/Utils/Zipping.java @@ -23,7 +23,7 @@ class Zipping { @return : Compressed byte array */ - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public static byte[] compress(String string) throws Exception { ByteArrayOutputStream os = new ByteArrayOutputStream(string.length()); @@ -44,7 +44,7 @@ public static byte[] compress(String string) throws Exception { @parameter : byte array @return : Uncompressed encrypted_message {String} */ - @RequiresNonNull("#1") +// @RequiresNonNull("#1") public static String decompress(byte[] compressed) throws Exception { ByteArrayInputStream bis = new ByteArrayInputStream(compressed);