Data update
This commit is contained in:
parent
61b93a2cd1
commit
5af6d93694
858 changed files with 20572 additions and 2082 deletions
117
Task/OpenWebNet-password/C++/openwebnet-password.cpp
Normal file
117
Task/OpenWebNet-password/C++/openwebnet-password.cpp
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int64_t own_password_calculation(const int64_t& password, const std::string& nonce) {
|
||||
const int64_t m1 = 0xFFFF'FFFF;
|
||||
const int64_t m8 = 0xFFFF'FFF8;
|
||||
const int64_t m16 = 0xFFFF'FFF0;
|
||||
const int64_t m128 = 0xFFFF'FF80;
|
||||
const int64_t m16777216 = 0xFF00'0000;
|
||||
|
||||
bool flag = true;
|
||||
int64_t number1 = 0;
|
||||
int64_t number2 = 0;
|
||||
|
||||
for ( char ch : nonce ) {
|
||||
number2 = number2 & m1;
|
||||
|
||||
switch (ch) {
|
||||
case '1':
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 & m128;
|
||||
number1 = number1 >> 7;
|
||||
number2 = number2 << 25;
|
||||
number1 = number1 + number2;
|
||||
break;
|
||||
|
||||
case '2':
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 & m16;
|
||||
number1 = number1 >> 4;
|
||||
number2 = number2 << 28;
|
||||
number1 = number1 + number2;
|
||||
break;
|
||||
|
||||
case '3':
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 & m8;
|
||||
number1 = number1 >> 3;
|
||||
number2 = number2 << 29;
|
||||
number1 = number1 + number2;
|
||||
break;
|
||||
|
||||
case '4':
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 << 1;
|
||||
number2 = number2 >> 31;
|
||||
number1 = number1 + number2;
|
||||
break;
|
||||
|
||||
case '5':
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 << 5;
|
||||
number2 = number2 >> 27;
|
||||
number1 = number1 + number2;
|
||||
break;
|
||||
|
||||
case '6':
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 << 12;
|
||||
number2 = number2 >> 20;
|
||||
number1 = number1 + number2;
|
||||
break;
|
||||
|
||||
case '7':
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 & 0xFF00L;
|
||||
number1 = number1 + ( ( number2 & 0xFFL ) << 24 );
|
||||
number1 = number1 + ( ( number2 & 0xFF0000L ) >> 16 );
|
||||
number2 = ( number2 & m16777216 ) >> 8;
|
||||
number1 = number1 + number2;
|
||||
break;
|
||||
|
||||
case '8':
|
||||
if ( flag ) { number2 = password;}
|
||||
flag = false;
|
||||
number1 = number2 & 0xFFFFL;
|
||||
number1 = number1 << 16;
|
||||
number1 = number1 + ( number2 >> 24 );
|
||||
number2 = number2 & 0xFF0000L;
|
||||
number2 = number2 >> 8;
|
||||
number1 = number1 + number2;
|
||||
break;
|
||||
|
||||
case '9':
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = ~number2;
|
||||
break;
|
||||
|
||||
default:
|
||||
number1 = number2;
|
||||
break;
|
||||
}
|
||||
number2 = number1;
|
||||
}
|
||||
|
||||
return number1 & m1;
|
||||
}
|
||||
|
||||
void own_password_calculation_test(const std::string& password, const std::string& nonce, const int64_t& expected) {
|
||||
const int64_t result = own_password_calculation(std::stoll(password), nonce);
|
||||
std::string message = password + " " + nonce + " " + std::to_string(result) + " " + std::to_string(expected);
|
||||
std::cout << ( ( result == expected ) ? "PASS " + message : "FAIL " + message ) << std::endl;
|
||||
}
|
||||
|
||||
int main() {
|
||||
own_password_calculation_test("12345", "603356072", 25280520);
|
||||
own_password_calculation_test("12345", "410501656", 119537670);
|
||||
}
|
||||
113
Task/OpenWebNet-password/Java/openwebnet-password.java
Normal file
113
Task/OpenWebNet-password/Java/openwebnet-password.java
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
public static void main(String[] aArgs) {
|
||||
ownPasswordCalculationTest("12345", "603356072", 25280520);
|
||||
ownPasswordCalculationTest("12345", "410501656", 119537670);
|
||||
}
|
||||
|
||||
private static void ownPasswordCalculationTest(String password, String nonce, long expected) {
|
||||
final long result = ownPasswordCalculation(Long.valueOf(password), nonce);
|
||||
String message = password + " " + nonce + " " + result + " " + expected;
|
||||
System.out.println( ( result == expected ) ? "PASS " + message : "FAIL " + message );
|
||||
}
|
||||
|
||||
private static long ownPasswordCalculation(long password, String nonce) {
|
||||
final long m1 = 0xFFFF_FFFFL;
|
||||
final long m8 = 0xFFFF_FFF8L;
|
||||
final long m16 = 0xFFFF_FFF0L;
|
||||
final long m128 = 0xFFFF_FF80L;
|
||||
final long m16777216 = 0xFF00_0000L;
|
||||
|
||||
boolean flag = true;
|
||||
long number1 = 0;
|
||||
long number2 = 0;
|
||||
|
||||
for ( char ch : nonce.toCharArray() ) {
|
||||
number2 = number2 & m1;
|
||||
|
||||
switch (ch) {
|
||||
case '1' -> {
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 & m128;
|
||||
number1 = number1 >>> 7;
|
||||
number2 = number2 << 25;
|
||||
number1 = number1 + number2;
|
||||
}
|
||||
|
||||
case '2' -> {
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 & m16;
|
||||
number1 = number1 >>> 4;
|
||||
number2 = number2 << 28;
|
||||
number1 = number1 + number2;
|
||||
}
|
||||
|
||||
case '3' -> {
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 & m8;
|
||||
number1 = number1 >>> 3;
|
||||
number2 = number2 << 29;
|
||||
number1 = number1 + number2;
|
||||
}
|
||||
|
||||
case '4' -> {
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 << 1;
|
||||
number2 = number2 >>> 31;
|
||||
number1 = number1 + number2;
|
||||
}
|
||||
|
||||
case '5' -> {
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 << 5;
|
||||
number2 = number2 >>> 27;
|
||||
number1 = number1 + number2;
|
||||
}
|
||||
|
||||
case '6' -> {
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 << 12;
|
||||
number2 = number2 >>> 20;
|
||||
number1 = number1 + number2;
|
||||
}
|
||||
|
||||
case '7' -> {
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = number2 & 0xFF00L;
|
||||
number1 = number1 + ( ( number2 & 0xFFL ) << 24 );
|
||||
number1 = number1 + ( ( number2 & 0xFF0000L ) >>> 16 );
|
||||
number2 = ( number2 & m16777216 ) >>> 8;
|
||||
number1 = number1 + number2;
|
||||
}
|
||||
|
||||
case '8' -> {
|
||||
if ( flag ) { number2 = password;}
|
||||
flag = false;
|
||||
number1 = number2 & 0xFFFFL;
|
||||
number1 = number1 << 16;
|
||||
number1 = number1 + ( number2 >>> 24 );
|
||||
number2 = number2 & 0xFF0000L;
|
||||
number2 = number2 >>> 8;
|
||||
number1 = number1 + number2;
|
||||
}
|
||||
|
||||
case '9' -> {
|
||||
if ( flag ) { number2 = password; }
|
||||
flag = false;
|
||||
number1 = ~number2;
|
||||
}
|
||||
|
||||
default -> number1 = number2;
|
||||
}
|
||||
number2 = number1;
|
||||
}
|
||||
|
||||
return number1 & m1;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue