-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
355 additions
and
128 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
36 changes: 36 additions & 0 deletions
36
vol3/src/main/java/ru/mifi/practice/val3/hasq/ChainFile.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package ru.mifi.practice.val3.hasq; | ||
|
||
import java.io.IOException; | ||
import java.nio.file.Files; | ||
import java.nio.file.Path; | ||
import java.nio.file.StandardOpenOption; | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
public abstract class ChainFile { | ||
static void write(Path path, Record root) throws IOException { | ||
List<Record> records = new ArrayList<>(); | ||
Record.createList(root, records); | ||
if (Files.exists(path)) { | ||
Files.delete(path); | ||
} | ||
Files.write(path, records.stream().map(Record::toString).toList(), StandardOpenOption.CREATE_NEW); | ||
} | ||
|
||
static Chain read(Path path, Hash hash) throws IOException { | ||
Record current = null; | ||
Record root = null; | ||
for (String line : Files.readAllLines(path)) { | ||
String[] parts = line.split(";"); | ||
Record prev = current; | ||
current = Record.from(current, parts, hash); | ||
if (root == null) { | ||
root = current; | ||
} | ||
if (prev != null) { | ||
prev.setNext(current); | ||
} | ||
} | ||
return Chain.newChain(root); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,38 @@ | ||
package ru.mifi.practice.val3.hasq; | ||
|
||
import java.security.MessageDigest; | ||
import java.util.HexFormat; | ||
import java.util.Locale; | ||
|
||
public interface Hash { | ||
String hash(); | ||
Hash MD5 = new MessageDigestHash("MD5"); | ||
Hash SHA1 = new MessageDigestHash("SHA1"); | ||
Hash SHA256 = new MessageDigestHash("SHA256"); | ||
Hash SHA512 = new MessageDigestHash("SHA512"); | ||
Hash DEFAULT = SHA1; | ||
|
||
String hash(Object... args); | ||
|
||
final class MessageDigestHash implements Hash { | ||
private final String algorithm; | ||
|
||
private MessageDigestHash(String algorithm) { | ||
this.algorithm = algorithm; | ||
} | ||
|
||
@Override | ||
public String hash(Object... objects) { | ||
try { | ||
MessageDigest digest = MessageDigest.getInstance(algorithm); | ||
for (Object object : objects) { | ||
digest.update(object.toString().getBytes()); | ||
} | ||
byte[] bytes = digest.digest(); | ||
return HexFormat.of().formatHex(bytes).toUpperCase(Locale.ROOT); | ||
} catch (Exception e) { | ||
throw new RuntimeException(e); | ||
} | ||
} | ||
|
||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package ru.mifi.practice.val3.hasq; | ||
|
||
import java.io.IOException; | ||
import java.nio.file.Path; | ||
|
||
import static ru.mifi.practice.val3.hasq.Chain.Detailed; | ||
import static ru.mifi.practice.val3.hasq.Chain.Token; | ||
import static ru.mifi.practice.val3.hasq.Chain.ValidateType; | ||
import static ru.mifi.practice.val3.hasq.Chain.newChain; | ||
|
||
public abstract class Main { | ||
public static void main(String[] args) throws IOException { | ||
String tokenValue = "1000000000"; | ||
Path filePath = Path.of(tokenValue + ".csv"); | ||
Hash hash = Hash.DEFAULT; | ||
Chain chain = newChain(new Token(tokenValue, hash), "init") | ||
.add("init", "N1") | ||
.add("init", "N2") | ||
.add("init", "N3") | ||
.add("init", "N4") | ||
.add("init", "N5") | ||
.add("init", "N6"); | ||
ChainFile.write(filePath, chain.root()); | ||
Chain read = ChainFile.read(filePath, hash); | ||
Result<ValidateType, Detailed> validated = read.validate(); | ||
System.out.println(validated); | ||
validated = chain.validate(); | ||
System.out.println(validated); | ||
} | ||
} |
Oops, something went wrong.