SlideShare a Scribd company logo
1 of 79
Cryptography 101
www.craftsmen.nl
michel@craftsmen.nl
@MichelSchudel
For Developers
JavaZone
Introduction
www.craftsmen.nl
michel@craftsmen.nl
@MichelSchudel
Basic understanding of
cryptographic concepts and
how they’re done in
Cryptography (or cryptology; from Greek
κρυπτός, kryptos, "hidden, secret"; and
γράφ, gráph, "writing", or -λογία, -logia,
respectively) is the practice and study of
hiding information.
https://en.wikipedia.org/wiki/Outline_of_cryptography
What does cryptography solve?
Confidentiality Integrity Authenticity
Key components of cryptography
Data
Algorithm
Key
<div>Icons made by <a href="https://www.flaticon.com/authors/freepik" title="Freepik">Freepik</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a></div>
Contemporary cryptography
Symmetric encryption Asymmetric encryption
Hashing
JCA
(Java Cryptography Architecture)
JCE
(Java Cryptography Extension)
https://www.bouncycastle.org/
Advanced
stuff
How to plug in a security provider
• JDK8 and previous:
• Update jre/lib/security/java.security
• Place specific provider JAR in lib/ext
• JDK9 and onwards:
• Update conf/security/java.security
• Place specific provider JAR on classpath
#
# List of providers and their preference orders (see above):
#
security.provider.1=sun.security.provider.Sun
security.provider.2=sun.security.rsa.SunRsaSign
security.provider.3=org.bouncycastle.jce.provider.BouncyCastleProvider
Or register it in
java.security
file
Security.addProvider(new BouncyCastleProvider());
(extends java.security.Provider)
JCA /JCE API Summary
Interface / class Function
Security Provider configuration
KeyGenerator Generates symmetric keys
Key Represents key material
Cipher Encryption algorithm
SecretKeyFactory Converts symmetric key material to
SecretKey abstraction
KeyPairGenerator Generates public / private keys
KeyPair Public / private keypair
KeyFactory Converts public / private material to Key
abstraction
KeyStore Storing mechanism for keys and
certificates
MessageDigest Hashing
HMAC Combines hashing and encryption
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Today we’re going to cover:
Hashing
Deterministic
Fixed size
One-way
Psuedo
Random
Hashing
Algorithms
MD-5 (hash size 128 bits)
SHA-1 (hash size 160 bits)
SHA-256 (hash size 256 bits)
Hashing
https://www.computerworld.com/article/3173616/the-sha1-
hash-function-is-now-completely-unsafe.html
Collisions
Current BitCoin hashrate: 300 quadrillion SHA-256 hashes per second
(300x10^15)
Collision attack: calculate 2^128 hashes
Time needed at Bitcoin’s current rate: 3.6x10^13 years
Age of the universe: 13.7x10^9 years
data1 <> data2 -> Hash(data1) == Hash(data2)
My message
digest
68B1282B91DE2C054C36629CB8DD447F12F0
96D3E3C587978DC2248444633483
MessageDigest
static
getInstance(“SHA-256”)
Hashing in
Application: password hashing
Application: bitcoin block mining
transaction{from: michel, to: javazone, kudos, 5}
transaction{from: michel, to: jfokus, kudos, 4}
nonce: 0
transaction{from: michel, to: javazone, kudos, 5}
transaction{from: michel, to: jfokus, kudos, 4}
nonce : 1
transaction{from: michel, to: javazone, kudos, 5}
transaction{from: michel, to: jfokus, kudos, 4}
nonce : 2
nonce++
nonce++
Block mining
SHA-256 000084E534…..
SHA-256 D63C34F5D6…..
SHA-256 23A984E534…..
Hash of a block should start with 0000….
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Symmetric encryption
Symmetric encryption
“ JavaZone ”
3H6V3E98
Encryption
AlgorithmB4 C3 F8 32 87 A9 6E
• DES (Data Encryption Standard)
• block size 64 bits
• key size 56 bits
• AES (Advanced Encryption Standard)
• block size 128 bits
• key size 128/ 192 / 256 bits
https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
Symmetric encryption
Algorithms
Symmetric encryption in
KeyGenerator
Key
generateKey(keySize, for example 192)
Cipher
init(key)*
My message
doFinal
4fg67d34lk4lk
static
getInstance(“AES”)
static
getInstance(“AES”)
Key
Key size restrictions
“Illegal key size...” (calling init with keysize 192)
Limit on key sizes outside USA
• Install “unlimited strength jurisdiction policy files”
• /jre/lib/security/local_policy.jar, export_policy.jar
Java 8u152 includes unlimited strength jars
Java 8u162 and up have unlimited strength by default
https://golb.hplar.ch/2017/10/JCE-policy-changes-in-Java-SE-8u151-and-8u152.html
AES Encryption (with ECB)
Electronic CopyBook Encryption (ECB)
JavaZone JavaZone JavaZone
12345678 12345678 12345678
Cipher Block Chaining
(IV)
Symmetric encryption with IV in
SecureRandom
IvParameterSpec
nextBytes(array)
init init
My message
doFinal
4fg67d34lk4lk
KeyGenerator
Key
generateKey (192)
static
getInstance
(“AES”)
Cipher
Static
getInstance
(“AES”)
static
getInstance(“SHA1PRNG”)
AES Encryption with CBC
Application: Encrypt a Wallet (or zip file)
“myPassword” PBKDF2 SHA256 AES
Password-Based Key
Derivation Function
Key exchange
Martin
Hellman
Whitfield
Diffie
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Asymmetric keys
(public key cryptography)
Public key algorithms
• Diffie-Hellman key agreement protocol
• RSA (Rivest-Shamir-Adleman) – key size 1024,2048, 3072
• ECC (Elliptic Curve Cryptography) – keysize 128
Asymmetric cryptography in
KeyPair
generateKeyPair
init(keyPair.getPublic())
Cipher
init(keyPair.getPrivate())
KeyPairGenerator
static
getInstance(“RSA”)
Cipher
static
getInstance(“RSA”)
My message
doFinal
4fg67d34lk4lk
My message
doFinal
RSA Encryption
Don’t use Asymmetric encryption to encrypt large blocks of data
RSA in particular is slow
…but you CAN use it for…
• Agreeing on symmetric keys (Diffie-Hellman)
• Encryting / Decrypting symmetric keys
• Encrypting hashes, or message digests (Digital Signature)
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Confidentiality Integrity Authenticity
Digital signatures
Digital signatures
message message
“Hi, Alice!”
“Hi, Alice!”“I need money,
Alice!”
Calculate
HMAC - keyed-hash message authentication code
HMAC in
KeyGenerator
static
getInstance(“HMACSha256”)
Mac
static
getInstance(“HMACSha256”)
Key
generateKey(keySize)
init(key)
My message
4fg67d34lk4lk MAC
doFinal
HMAC
PUBLIC KEY
(CERTIFICATE)
VALIDATE
PUBLIC KEY
Digital signature using Asymmetric encryption
Digital signatures in
KeyPair
generateKeyPair
init(keyPair.getPrivate())
Signature
init(keyPair.getPublic())
KeyPairGenerator
static
getInstance(“RSA”)
Signature
static
getInstance(“RSA”)
My message
sign
4fg67d34lk4lk
verify
update
Digital signature
Application: Signing crypto transactions
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
Confidentiality Integrity Authenticity
https://www.jscape.com/hubfs/images/csr-ca-signed-server-certificate.png
What is in a certificate signing request?
• Common Name (CN): The fully qualified domain name (FE *.mydomain.com)
• Organization (FE myCompany)
• Organizational Unit (FE IT)
• City (FE “Oslo”)
• State /Country/ Region (“Norway”)
• Email address
• Public key
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIC3TCCAcUCAQAwaDELMAkGA1UEBhMCTkwxCzAJBgNVBAgTAk5MMRMwEQYDVQQH
...
-----END NEW CERTIFICATE REQUEST-----
https://www.jscape.com/hubfs/images/csr-ca-signed-server-certificate.png
Storing key and certificate material
JCA Keystore
myKeystore.jks
Keystore keyStore = keyStore.getInstance(“JKS”);
keyStore.load(inputstream, keystorepassword);
Key key = keyStore.getKey(alias, keypassword);
Certificate certificate = keyStore.getCertificate(alias);
keytool.exe
*.JKS
*.JCEKS
*.PKCS12
Generate keys
Import/export certs
Create CSR
Keytool.exe
• Generate keypair
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -
storepass password -validity 360 -keysize 2048
• List contents
keytool -list -keystore keystore.jks -storepass password
• Generate certificate request
keytool -certreq -alias selfsigned -keystore keystore.jks -storepass
password
• Export certificate
• keytool -exportcert -keystore keystore.jks -storepass password -alias
selfsigned > out.cer
1. Hashing
2. Symmetric encryption
3. Asymmetric encryption
4. Digital signatures
5. Certificates
https://www.cryptologie.net/article/340/tls-pre-master-secrets-and-master-secrets/
• Diffie-Hellman
• RSA
Send certificate
Encrypt with
Public key / DH
Decrypt with
Private key /DH
Generate symmetric
key
Generate symmetric
key
AES Encryption
AES Encryption
HTTPS
Validate certificate
Check digital
signature
Basic understanding of
cryptographic concepts and
how they’re done in
https://github.com/MichelSchudel/crypto-demo
www.craftsmen.nl
michel@craftsmen.nl
@MichelSchudel
Demo slides
KeyGenerator generator = KeyGenerator.getInstance("AES", "BC");
generator.init(192);
Key key = generator.generateKey();
Obtain a key
Init the algorithm with the key
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, key);
Encrypt the data
byte[] encryptedOutput = cipher.doFinal(“Hello, devoxx!!!”.getBytes());
CE 41 54 A4 0F E0 2B 0C 7F C7 4B 2F 6E B5 B4 7A CE 41 54 A4 0F E0
2B 0C 7F C7 4B 2F 6E B5 B4 7A CE 41 54 A4 0F E0 2B 0C 7F C7 4B 2F 6E B5 B4 7A
cipher.init(Cipher.DECRYPT_MODE, key);
cipher.doFinal(CE 41 54 A4 0F E0 2B 0C 7F C7 4B 2F 6E B5 B4 7A CE 4
2B 0C 7F C7 4B 2F 6E B5 B4 7A CE 41 54 A4 0F E0 2B 0C 7F C7 4B 2F 6E B5 B4
Decrypting
hello, devoxx
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair kp = kpg.generateKeyPair();
Key pub = kp.getPublic();
Key pvt = kp.getPrivate();
Obtain a key
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
return cipher.doFinal(message.getBytes());
Encryption
Signature dsa = Signature.getInstance("SHA256withRSA");
dsa.initSign(keyPair.getPrivate());
dsa.update(“Hi devoxx!!!!”.getBytes());
byte[] signature = dsa.sign();
Creating a digital signature of a payload
Signature dsa = Signature.getInstance("SHA256withRSA ");
dsa.initVerify(kp.getPublic());
dsa.update(“Hi devoxx!!!!”.getBytes());
boolean signatureIsOk = dsa.verify(signature);
Verifying a signature
KeyGenerator generator = KeyGenerator.getInstance("HMACSha256");
Key key = generator.generateKey();
// create signature
Mac mac = Mac.getInstance("HMACSha256");
mac.init(key);
byte[] input = "Hello, world!".getBytes();
byte[] signature = mac.doFinal(input);
// validation of signature
byte[] recievedInput = "Hello, world! ".getBytes();
byte[] newSignature = mac.doFinal(recievedInput);
// now compare newly generated signature with received signature
assertEquals(new String(signature), new String(newSignature));
Symmetric signing (HMAC)
MessageDigest digester = MessageDigest.getInstance("SHA-256“);
Obtain a hash function
Put some data in the function
digester.update(“Hi there”.getBytes());
Digest the data
digester.digest();
68 B1 28 2B 91 DE 2C 05 4C 36 62 9C B8 DD 44 7F 12 F0 96 D3 E3 C5 87 97 8D C2 24 84 44 63 34 83

More Related Content

What's hot

What's hot (20)

Neat tricks to bypass CSRF-protection
Neat tricks to bypass CSRF-protectionNeat tricks to bypass CSRF-protection
Neat tricks to bypass CSRF-protection
 
Cryptography for Java Developers: Nakov jProfessionals (Jan 2019)
Cryptography for Java Developers: Nakov jProfessionals (Jan 2019)Cryptography for Java Developers: Nakov jProfessionals (Jan 2019)
Cryptography for Java Developers: Nakov jProfessionals (Jan 2019)
 
Secure coding practices
Secure coding practicesSecure coding practices
Secure coding practices
 
OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...
OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...
OWASP SD: Deserialize My Shorts: Or How I Learned To Start Worrying and Hate ...
 
The Hacker's Guide to NoSQL Injection
The Hacker's Guide to NoSQL InjectionThe Hacker's Guide to NoSQL Injection
The Hacker's Guide to NoSQL Injection
 
What should a hacker know about WebDav?
What should a hacker know about WebDav?What should a hacker know about WebDav?
What should a hacker know about WebDav?
 
Red Team Apocalypse (RVAsec Edition)
Red Team Apocalypse (RVAsec Edition)Red Team Apocalypse (RVAsec Edition)
Red Team Apocalypse (RVAsec Edition)
 
Hacking Adobe Experience Manager sites
Hacking Adobe Experience Manager sitesHacking Adobe Experience Manager sites
Hacking Adobe Experience Manager sites
 
HTTP Security Headers
HTTP Security HeadersHTTP Security Headers
HTTP Security Headers
 
Going Beyond Microsoft IIS Short File Name Disclosure - NahamCon 2023 Edition
Going Beyond Microsoft IIS Short File Name Disclosure - NahamCon 2023 EditionGoing Beyond Microsoft IIS Short File Name Disclosure - NahamCon 2023 Edition
Going Beyond Microsoft IIS Short File Name Disclosure - NahamCon 2023 Edition
 
Pwning the Enterprise With PowerShell
Pwning the Enterprise With PowerShellPwning the Enterprise With PowerShell
Pwning the Enterprise With PowerShell
 
Offzone | Another waf bypass
Offzone | Another waf bypassOffzone | Another waf bypass
Offzone | Another waf bypass
 
iOS Application Pentesting
iOS Application PentestingiOS Application Pentesting
iOS Application Pentesting
 
Waf bypassing Techniques
Waf bypassing TechniquesWaf bypassing Techniques
Waf bypassing Techniques
 
Mit 2014 introduction to open id connect and o-auth 2
Mit 2014   introduction to open id connect and o-auth 2Mit 2014   introduction to open id connect and o-auth 2
Mit 2014 introduction to open id connect and o-auth 2
 
OWASP Secure Coding
OWASP Secure CodingOWASP Secure Coding
OWASP Secure Coding
 
XSS Magic tricks
XSS Magic tricksXSS Magic tricks
XSS Magic tricks
 
Http security response headers
Http security response headers Http security response headers
Http security response headers
 
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
 
Building Advanced XSS Vectors
Building Advanced XSS VectorsBuilding Advanced XSS Vectors
Building Advanced XSS Vectors
 

Similar to Cryptography 101 for Java Developers - JavaZone2019

Java Symmetric
Java SymmetricJava Symmetric
Java Symmetric
phanleson
 

Similar to Cryptography 101 for Java Developers - JavaZone2019 (20)

Cryptography 101 for Java Developers - Devoxx 2019
Cryptography 101 for Java Developers - Devoxx 2019Cryptography 101 for Java Developers - Devoxx 2019
Cryptography 101 for Java Developers - Devoxx 2019
 
Cryptography 101 for_java_developers, Fall 2019
Cryptography 101 for_java_developers, Fall 2019Cryptography 101 for_java_developers, Fall 2019
Cryptography 101 for_java_developers, Fall 2019
 
Cryptography 101 for Java developers
Cryptography 101 for Java developersCryptography 101 for Java developers
Cryptography 101 for Java developers
 
Cryptography 101 for Java developers
Cryptography 101 for Java developersCryptography 101 for Java developers
Cryptography 101 for Java developers
 
Cargo Cult Security UJUG Sep2015
Cargo Cult Security UJUG Sep2015Cargo Cult Security UJUG Sep2015
Cargo Cult Security UJUG Sep2015
 
Cargo Cult Security at OpenWest
Cargo Cult Security at OpenWestCargo Cult Security at OpenWest
Cargo Cult Security at OpenWest
 
Java Symmetric
Java SymmetricJava Symmetric
Java Symmetric
 
Django cryptography
Django cryptographyDjango cryptography
Django cryptography
 
Encryption Boot Camp at JavaZone 2010
Encryption Boot Camp at JavaZone 2010Encryption Boot Camp at JavaZone 2010
Encryption Boot Camp at JavaZone 2010
 
Hadoop Security Now and Future
Hadoop Security Now and FutureHadoop Security Now and Future
Hadoop Security Now and Future
 
Security via Java
Security via JavaSecurity via Java
Security via Java
 
Cargo Cult Security 2014_01_18
Cargo Cult Security 2014_01_18Cargo Cult Security 2014_01_18
Cargo Cult Security 2014_01_18
 
Security and Encryption on iOS
Security and Encryption on iOSSecurity and Encryption on iOS
Security and Encryption on iOS
 
Dynamic Database Credentials: Security Contingency Planning
Dynamic Database Credentials: Security Contingency PlanningDynamic Database Credentials: Security Contingency Planning
Dynamic Database Credentials: Security Contingency Planning
 
Talk about html5 security
Talk about html5 securityTalk about html5 security
Talk about html5 security
 
Bsidesnova- Pentesting Methodology - Making bits less complicated
Bsidesnova- Pentesting Methodology - Making bits less complicatedBsidesnova- Pentesting Methodology - Making bits less complicated
Bsidesnova- Pentesting Methodology - Making bits less complicated
 
Demystifying Apple 'Pie' & TouchID
Demystifying Apple 'Pie' & TouchIDDemystifying Apple 'Pie' & TouchID
Demystifying Apple 'Pie' & TouchID
 
Top Ten Java Defense for Web Applications v2
Top Ten Java Defense for Web Applications v2Top Ten Java Defense for Web Applications v2
Top Ten Java Defense for Web Applications v2
 
DEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menace
DEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menaceDEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menace
DEF CON 27 - ALVARO MUNOZ / OLEKSANDR MIROSH - sso wars the token menace
 
FIPS 140-2 Validations in a Secure Enclave
FIPS 140-2 Validations in a Secure EnclaveFIPS 140-2 Validations in a Secure Enclave
FIPS 140-2 Validations in a Secure Enclave
 

More from Michel Schudel

More from Michel Schudel (12)

Testing an onion architecture - done right
Testing an onion architecture - done rightTesting an onion architecture - done right
Testing an onion architecture - done right
 
What makes a high performance team tick?
What makes a high performance team tick?What makes a high performance team tick?
What makes a high performance team tick?
 
Atonomy of-a-tls-handshake-mini-conferentie
Atonomy of-a-tls-handshake-mini-conferentieAtonomy of-a-tls-handshake-mini-conferentie
Atonomy of-a-tls-handshake-mini-conferentie
 
Spring boot Under Da Hood
Spring boot Under Da HoodSpring boot Under Da Hood
Spring boot Under Da Hood
 
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition! Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
Battle Of The Microservice Frameworks: Micronaut versus Quarkus edition!
 
Micronaut brainbit
Micronaut brainbitMicronaut brainbit
Micronaut brainbit
 
Java n-plus-1-incl-demo-slides
Java n-plus-1-incl-demo-slidesJava n-plus-1-incl-demo-slides
Java n-plus-1-incl-demo-slides
 
Let's build a blockchain.... in 40 minutes!
Let's build a blockchain.... in 40 minutes!Let's build a blockchain.... in 40 minutes!
Let's build a blockchain.... in 40 minutes!
 
Let's Build A Blockchain... in 40 minutes!
Let's Build A Blockchain... in 40 minutes!Let's Build A Blockchain... in 40 minutes!
Let's Build A Blockchain... in 40 minutes!
 
What's new in Java 11
What's new in Java 11What's new in Java 11
What's new in Java 11
 
Java 9 overview
Java 9 overviewJava 9 overview
Java 9 overview
 
Test your microservices with REST-Assured
Test your microservices with REST-AssuredTest your microservices with REST-Assured
Test your microservices with REST-Assured
 

Recently uploaded

Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 

Recently uploaded (20)

Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 

Cryptography 101 for Java Developers - JavaZone2019